- 浅拷贝——copy.copy()
- 针对不可变对象,比如数值、字符串、元组,和赋值情况相同,对象的id值和原对象相同
- 针对可变对象(申请新的内存空间)
- 可变对象里无嵌套对象时,原对象改变不影响新对象,新对象改变也不影响原对象,两者id值不同。
- 可变对象里有嵌套对象时,比如列表嵌套列表,改变嵌套的对象时,会影响新对象中的值。
- 深拷贝——copy.deepcopy()
- 申请新的内存空间,拷贝原对象本身以及所有的嵌套对象,完完整整的复制一份,改变原对象不会对新对象产生影响。
- 赋值
- 赋值即给对象创建一个新的引用,不会申请新的内存空间,id值相同,改变原对象会影响新对象。
>>> import copy
>>> a = [1, 2, 3, 4, ['a','b']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> print(id(a), id(b), id(c), id(d))
58582152 58582152 58581160 64786344
>>> a.append(5)
>>> a[4].append('c')
>>> a[0] = 99
>>> print(a, id(a))
[99, 2, 3, 4, ['a', 'b', 'c'], 5] 58582152
>>> print(b, id(b))
[99, 2, 3, 4, ['a', 'b', 'c'], 5] 58582152
>>> print(c, id(c))
[1, 2, 3, 4, ['a', 'b', 'c']] 58581160
>>> print(d, id(d))
[1, 2, 3, 4, ['a', 'b']] 64786344