python---深拷贝,浅拷贝

1.循环删除list元素问题

正在循环的list 删除里面的元素会导致下标错乱,取值有误
解决方法:另外定义一个相同的list 循环的list和删除的list不是同一个

错误:

l = [1, 1, 2, 3, 5, 5, 6, 7, 8]
for i in l:
if i%2 !=0:
# 删除元素时导致下标错乱
l.remove(i)
print(l)

正确:

l = [1, 1, 2, 3, 5, 5, 6, 7, 8]
l2 = [1, 1, 2, 3, 5, 5, 6, 7, 8]
for i in l2:
if i%2 !=0:
# 删除元素时导致下标错乱
l.remove(i)
print(l)


2.深拷贝与浅拷贝

(1)模块引入:使用copy方法需要引入copy模块

(2)浅拷贝:内存地址变了 也不一定是深拷贝,如果l为多维数组 copy只能拷贝外层 里面也会受影响

l2=copy.copy(l)
l2=l[:]
例:
l = [1, 1, 2, 3, 5, 5, 6, 7, 8,[222,333,3]]
l2=copy.copy(l)
l2[-1][1]="王王"
print(l)
print(l2)

(3)深拷贝

l2=copy.deepcopy(l)
例:
l = [1, 1, 2, 3, 5, 5, 6, 7, 8,[222,333,3]]
l2=copy.deepcopy(l)
l2[-1][1]="王王"
print(l)
print(l2)
结果:l不受影响

(4)查看内存地址:id()

print(id(l))
print(id(l2))
posted @ 2021-11-03 14:46  王王的王  阅读(87)  评论(0)    收藏  举报