Python中的拷贝

  • 直接赋值:其实就是对象的引用(别名).两个对象是引用的同一块内存区域

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

引用示例

a = [1,2,3,4]
b = a
a.append(5)
print(a, b)
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

浅拷贝示例

import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = copy.copy(a)
a.append(5)
a[4].append('c')  
print(a) 
print(b)
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
[1, 2, 3, 4, ['a', 'b', 'c']]

可以看到,父对象被拷贝了,当直接对父对象做修改时,拷贝值也相应的得到了变化,但是对子对象修改时,拷贝值不变

深拷贝示例

import copy
c = [1, 2, 3, 4, ['a', 'b']]
d = copy.deepcopy(a)
c.append(5)
c[4].append('c')  
print(c)
print(d)
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
[1, 2, 3, 4, ['a', 'b', 'c'], 5]