深拷贝浅拷贝
问题:
l = [0, 1, 2,2, 3, 4, 5] for i in l: if i % 2 == 0: l.remove(i) print(l) # [1,2,3,5]
原因:删除的过程中下标变了
解决:
l = [0, 1, 2,2, 3, 4, 5] l2 = [0, 1, 2,2, 3, 4, 5] for i in l2: if i % 2 == 0: l.remove(i) print(l) # [1,3,5]
不知道list是什么内容的情况下,无法复制,需要怎么操作。l2=l 是不可行的。
l = [0, 1, 2,2, 3, 4, 5] l2 = l # 浅拷贝
print(id(l))
print(id(l2))
for i in l2: if i % 2 == 0: l.remove(i) print(l) # [1,2,3,5]
导入copy模块。
l = [0, 1, 2,2, 3, 4, 5] l2 = copy.deepcopy(l)#深拷贝 print(id(l)) # 内存地址 print(id(l2)) for i in l2: if i % 2 == 0: l.remove(i) print(l) # [1,3,5]
l = [ 1,2,3,[4,5,6] ] # l2 = l.copy() # l2 = copy.copy(l) l2 = l[:] print(id(l)) print(id(l2)) l[-1].append('abc') print(l) print(l2)
浅拷贝/深拷贝 #如果复制了一个变量,这两个变量其中一个变了之后,不应该影响另外一个的情况下,就要用深拷贝