深拷贝浅拷贝

 

问题:

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)

 

 

浅拷贝/深拷贝 #如果复制了一个变量,这两个变量其中一个变了之后,不应该影响另外一个的情况下,就要用深拷贝

 

posted @ 2021-07-16 14:26  灿烂初秋  阅读(31)  评论(0编辑  收藏  举报