1.直接拷贝
变量: 是对象的引用或者是指向对象的指针
对象:是被分配的一块内存,存储其值
如下可见,变量a引用int对象3,,变量a直接赋值给变量b,变量a和变量b都是指向同一个内存地址
a = 3
b = a
print(id(a), id(b))
---------------------
#140704918502528 140704918502528
2.浅拷贝
3.深拷贝
包含对象里面的子对象的拷贝,原始数据改变不会改变任何子元素
a = [1, 2, 3, ["a", "b"]]
print("原列表:{}".format(a))
b = a
c = a.copy()
d = copy.deepcopy(a)
a.append(22)
a[3].append("last")
print("直接赋值列表: {}".format(b))
print("浅拷贝列表:{}".format(c))
print("深拷贝列表:{}".format(d))
---------------------------------------
#原列表:[1, 2, 3, ['a', 'b']]
#直接赋值列表: [1, 2, 3, ['a', 'b', 'last'], 22]
#浅拷贝列表:[1, 2, 3, ['a', 'b', 'last']]
#深拷贝列表:[1, 2, 3, ['a', 'b']]
总结:
- 浅拷贝会将对象复制生成一个新对象,但新对象仍然存储原始对象的引用,当原始对象是可变对象,然后修改它的值时,新旧对象会同时改变。
- 深拷贝不仅会将对象复制生成一个新对象,且所有原始对象都会复制生成新对象,即使原始对象是可变对象,新对象存储的对象引用也是新的,所以改变旧对象的可变对象时,不会影响新对象。