python3 list深浅拷贝
下面代码示例不是拷贝:
a = [1, 2, 3, 4, 5]
b = a
print(id(a))
print(id(b))
print(id(a[0]))
print(id(b[0]))
>>>3159527737608
>>>3159527737608
>>>1839268304
>>>1839268304
内存管理图
1.png
list浅拷贝三种方法:
1、list的切片
a = [[1, 2], 3, 4, 5]
b = a[:]
print(b) # [[1, 2], 3, 4, 5]
2、导入copy模块
import copy
a = [[1, 2], 3, 4, 5]
b = copy.copy(a)
print(b) # [[1, 2], 3, 4, 5]
3、list的copy()方法
a = [[1, 2], 3, 4, 5]
b = a.copy()
print(id(a)) # 1811054808264
print(id(b)) # 1811054808200
print(id(a[0])) # 1839268304
print(id(b[0])) # 1839268304
b[1] = 1111
print(a) # [[1, 2], 3, 4, 5]
print(b) # [[1, 2], 1111,4, 5]
b[0][0] = 1111
print(a) # [[1111, 2], 3, 4, 5]
print(b) # [[1111, 2], 3, 4, 5]
2.png
深复制
import copy
a = [[1, 2], 3, 4, 5]
b = copy.deepcopy(a)
a[0][0] = 111
b[1] = 22
print(a) # [[111, 2], 3, 4, 5]
print(b) # [[1, 2], 22, 4, 5]