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))

浙公网安备 33010602011771号