拷 贝:
从原始数据复制一份出来,当复制成功后,这两份数据都是相互独立的,即修改任意一份数据都不会影响另一份数据。
浅拷贝:
python中,浅拷贝就是只是拷贝最外层的类型,简单来讲就是拷贝了引用,并没有拷贝内容. copy.copy()
深拷贝:
对于一个对象所有层次的拷贝(递归拷贝)copy.deepcopy()
01
python中的不可变数据类型,值发生改变,id也改变
整型
浮点数
布尔值
字符串
元组
可变数据类型,值改变,但是id可以不变
列表
字典
集合
不可变数据类型:
赋值
浅拷贝
深拷贝
可变数据类型:
赋值
浅拷贝
深拷贝
不可变数据类型赋值:不改变值
只是进行了值的传递给不同的变量名,还在同一个空间
a1 = 1
print(id(a1))
a2 = a1
print(id(a2))
结果:
1867822144
1867822144
只能进行赋值操作才能改变改值,以整型举例
a1 = 1
print(id(a))
# 要想改变a的值,那就只能赋值,而进行赋值操作就已经改变了id
a1 = 2
print(id(a))
结果:
1867822144
1867822176
使用copy模块的copy()方法
import copy
a1 = 3.14
a2 = copy.copy(a1)
print(id(a1), id(a2))
# 输出结果
1698640564680 1698640564680
通过使用copy模块里的copy()函数来进行浅拷贝,把a1拷贝一份赋值给a2,查看输出结果发现,a1和a2的内存地址还是一样。
a1 = [1,2,3,4]
a2 = a1
print(id(a1),id(a2))
# 输出结果 不改变id
2805765390984 2805765390984
a = [1,2,3,4]
a1 = [1,2,3,4,a]
a2 = a1.copy()
print(id(a1),id(a2))
# 输出的外层id发生了改变
2943074293576 2943074291912
print(id(a1[4]),id(a2[4]))
# 输出的内层id没有发生了改变
2943073469064 2943073469064
没有实现真正的拷贝,内层的元素会让拷贝后的列表受到影响
import copy
a = [1,2,3,4]
a1 = [1,2,3,4,a]
a2=copy.deepcopy(a1)
print(id(a1),id(a2))
# 输出结果 外层id改变
1929499550024 1929499551304
print(id(a1[4]),id(a2[4]))
# 输出结果 内层也id改变
1929499549832 1929499551240
实现真正的拷贝,内层的元素不会让拷贝后的列表受到影响
联系客服