day5—python——深浅拷贝列表循环

直接循环list是元素,不是下标
循环删list中的元素,会导致下标错位,导致错误

l=[1,1,1,2,3,4,5]
#0 1 2 3 4 5 6 因为list根据下标取值,第一次循环0位,删除后,位置为1的1变为了位置为0,但是第0位已经循环了
for i in l:
if i%2!=0: # %取余 !=奇数 ==偶数
l.remove(i)
print(l)
# [1, 2, 4] 循环删list中的元素,会导致下标错位,导致错误
--------------------------------------------------------------------------------

l=[1,1,1,2,3,4,5]
l2=[1,1,1,2,3,4,5]
for i in l2: #设置两个list,循环l2,删除l的元素就可以了
if i%2!=0:
l.remove(i)
print(l)
# [2, 4]
print(id(l)) #打印内存地址
print(id(l2))

如果设置下行没用:
l=[1,1,1,2,3,4,5]
l2=l #浅拷贝 因为内存地址都一样
l2 = l.copy() #这个也是浅拷贝

所以下面代码就可以了:
import copy
l=[1,1,1,2,3,4,5]
l2 = copy.deepcopy(l) #深拷贝,内存地址不一样,等于重新定义了一个变量
for i in l2: #设置两个list,循环l2,删除l的元素就可以了
if i%2!=0:
l.remove(i)
print(l)
--------------------------------------------------------------------------------
a='tanailing'
b=a
a ='niuniu'
print(b)

#tanailing
#niuniu
#因为字符串不会改变,重新赋值,会在内存地址里新申请一块

猜你喜欢

转载自www.cnblogs.com/apollecn/p/9614627.html