deep copy 和 copy
深拷贝:与原集合彻底无关联
浅拷贝:与原集合的最外面一层没有关联,但是对于list中的list是指向的同一块内存
【浅拷贝例子】
# 再创建一个新的列表,也是列表套列表
a = [1, 2, [3, 4, 5]]
ac = a.copy() # ac是a的一个浅拷贝
# 我们改一下ac的值
ac[0] = 10
print(a[0], ac[0]) # 1 10 确实实现了拷贝, a和ac分开了
# 但是真的分的彻底吗? 我们改一下ac的值,但这次该里面那个列表
ac[2][1] = 40
print(a[2][1], ac[2][1]) # 40 40 我们发现了啥? 竟然改ac里面列表的时候a里面的列表也跟着变了
【深拷贝例子】
from copy import deepcopy
a = [1, 2, [3, 4, 5]]
ac = deepcopy(a)
ac[0] = 10
ac[2][1] = 40
print(a[0], ac[0]) # 1 10
print(ac[2][1], a[2][1]) # 40 4
【例子】
list1 = [[123, 456], [789, 213],3]
list2 = list1 # 完全一样,始终指向同一块内存
list3 = list1[:] # 浅拷贝
print('list1:{}'.format(id(list1)))
print(id(list2))
print(id(list3))
print('****')
list1[0][0]=111
print('list1:{}'.format(list1))
print('list2:{}'.format(list2))
print('list3:{}'.format(list3))
print("----")
list1[2]=2
print('list1:{}'.format(list1)) # [[123, 456], [789, 213],2]
print('list2:{}'.format(list2)) # [[123, 456], [789, 213],2]
print('list3:{}'.format(list3)) # [[123, 456], [789, 213],3]
python实现list 的 deep copy
>>> import copy
>>> b = copy.deepcopy(a)
>>> a
[[1, 10, 3], [4, 5, 6]]
>>> b
[[1, 10, 3], [4, 5, 6]]
>>> a[0][1] = 9
>>> a
[[1, 9, 3], [4, 5, 6]]
>>> b # b doesn't change -> Deep Copy
[[1, 10, 3], [4, 5, 6]]