Python中万物皆对象。所有变量都指向一个id(内存地址)。在内存地址中保存着数值。
1.可变类型与不可变类型
import copy
# copy函数的探究
# 对于可变类型(列表、字典)copy为深拷贝,id与原来不同
a = [1,2,3]
b = copy.copy(a)
# 对于不可变类型(元组、数值、字符串),copy为浅拷贝,id与原来一样
c = 12
d = copy.copy(c)
e = copy.deepcopy(c)
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(id(e))
2056783131200
2056783348224
2056610605712
2056610605712
2056610605712
2.可变类型是否含复杂子对象
2.1复制的对象中无复杂子对象,即列表中不嵌套列表。
原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。
原来值的id值与浅复制原来的值不同。
2.2 若复制的对象中有复杂子对象
1.当原始值的复杂子对象改变时,浅拷贝的值也会改变.反过来当浅拷贝的对象值中复杂子对象改变时,原始值也会改变
2.当原始值的不是复杂子对象改变时,浅拷贝的值不会改变。
而对于深拷贝来说,上述情况都不会改变拷贝出来对象的值
c = [1,2,3,[1,2,3]]
d = copy.copy(c)
e = copy.deepcopy(c)
c[3].append(4)
c.append(4)
d[3].append(5)
print(c)
print(d)
print(e)
[1, 2, 3, [1, 2, 3, 4, 5], 4]
[1, 2, 3, [1, 2, 3, 4, 5]]
[1, 2, 3, [1, 2, 3]]