五、python基本数据类型分类

五、Python基本数据类型分类

1.基本数据类型

(1) 数字
int 整型(1, 2, -1, -2)
float 浮点型(34.678)
bool 布尔型(True/False)
complex 复数(z=a+bj a是实部,b是虚部,j是虚部单位,如:num=4+3j), 不应用于常规编程,这种仅了解一下就好
(2)字符串
str 单引号和双引号内表示的内容为字符串 “hello world" "12345"
(3)列表
list 使用中括号表示 [1, 2, 3, 4]
(4)元组
tuple 使用小括号表示 (1, 2, 3, 4)
(5)字典
dict 使用大括号表示,存放key-value键值对 {"a":1, "b":2, "c":3}
(6)集合
set 也使用大括号表示,但与字典有所不同 {1, 2, 3, 4}

可变数据类型

可变数据类型:变量对应的值可以修改,但是内存地址不会发生改变
常见的可变类型:
1.列表:list
2.字典:dict
3.集合:set

不可变数据类型

不可变数据类型:变量对应的值不能被修改,如果修改就会生成一个新的值从而分配新的内存空间
常见的不可变类型:
1.数值类型:int,bool,float,complex
2.字符串:str
3.元组:tuple

2.类型的转换

转换函数 说明
int(xxx) 将xxx转换为整数
float(xxx) 将xxx转换为浮点型
str(xxx) 将xxx转换为字符串
list(xxx) 将xxx转换为列表
tuple(xxx) 将xxx转换为元组
dict(xxx) 将xxx转换为字典
set(xxx) 将xxx转换为集合
chr(xxx) 把整数[0-255]转成对应的ASCII码
ord(xxx) 把ASCII码转成对应的整数[0-255]
注意点:
浮点型转换为整型会去掉小数点及后面的数值,只保留整数的部分
浮点型转换为字符串类型会去除末尾为0的小数部分
#list():可将迭代对象转换成列表
#支持转换为list的类型:str、tuple、dict、set
#str->list
str1='abcde'
list1=list(str1)
print(list1,type(list1))

#dict->list  # 字典转换为列表,只会取键名作为列表的值
dict1={'name':'zhangsan','age':23}
print(list(dict1))  #['name', 'age']

#set->list  # 集合转换成列表,会先去重,
set1={'a','b','c','d','a'}
print(list(set1),type(list(set1)))

3.其他类型转换

eval() 用来执行一个字符串表达式,并返回表达式的值

print(10+10)  # 20
print('10'+'10')  # 1010
print(eval('10+10')) # 20,执行运算,并返回运算值
print(eval(10+'10')) # 报错,整型和字符串不可以相加

eval()可以实现list,dict,tuple和str之间的转换
#str->list
st1="[[1,2],[3,4],[5,6]]"
print(st1,type(st1))
li=eval(st1)
print(li,type(li))

#str->dict
st2="{'name1':'张三','name2':'李四'}"
print(st2,type(st2))
dict=eval(st2)
print(dict,type(dict))

#str->tuple
st3="(1,2,3,4)"
print(st3,type(st3))
tu=eval(st3)
print(tu,type(tu))

4.赋值和深浅拷贝

赋值

#赋值:变量会随着原对象的变化一起改变
li=[1,2,3,4]
li2=li
print('li:',li)
print('li2:',li2)
li.append(5)
print('新增后li:',li)
print('新增后li2:',li2)
#赋值等于完全资源共享,一个值的改变会完全影响另一个值
print('li的内存地址',id(li))  #查看内存地址
print('li2的内存地址',id(li2))

浅拷贝(数据半共享)

# 浅拷贝会创建新的对象,拷贝第一层的数据,嵌套层会指向原来的内存地址
# 优点:拷贝速度快,占用空间少,拷贝效率高
import copy  #导入copy模块
li=[1,2,3,[4,5,6]]
li2=copy.copy(li)
print('li:',li)
print('li2:',li2)
# li和li2的内存地址不一样,说明不是同一个对象
print('li的内存地址',id(li))
print('li2的内存地址',id(li2))

li=[1,2,3,[4,5,6]]
li2=copy.copy(li)
#第一层添加一个对象,浅拷贝的列表li2不会添加
li.append(8)
print('li:',li)
print('li2:',li2)

li=[1,2,3,[4,5,6]]
li2=copy.copy(li)
# 嵌套层添加元素,li和li2都会添加元素,因为浅拷贝外层的内存地址不同,但是内层的内存地址相同
li[3].append(7)
print('li:',li)
print('li2:',li2)
print('li[3]的内存地址为:',id(li[3]))
print('li2[3]的内存地址为:',id(li2[3]))

深拷贝(数据不共享)

#深拷贝外层的对象和内部的元素都拷贝了一遍
import copy
li=[1,2,3,[4,5,6]]
li2=copy.deepcopy(li)
print('li:',li,id(li))
print('li2:',li2,id(li2))

li=[1,2,3,[4,5,6]]
li2=copy.deepcopy(li)
li.append(8)
print('li:',li)
print('li2:',li2)

#在嵌套列表添加元素
li=[1,2,3,[4,5,6]]
li2=copy.deepcopy(li)
li[3].append(7)
print('li:',li,id(li[3]))
print('li2:',li2,id(li2[3]))
#深拷贝数据变化只影响自己本身,跟原来的对象没有关联
posted @ 2023-06-02 09:39  村尚chun叔  阅读(38)  评论(0)    收藏  举报