写给喜欢python的人
一切都因为那些可变的序列:
num_list = [1,2,3,4,5,6]
any_list = num_list
any_list.append('A')
print(num_list,any_list,sep='\n')
输出:
[1, 2, 3, 4, 5, 6, 'A']
[1, 2, 3, 4, 5, 6, 'A']
变量只是附加在对象上的标注,
any_list和num_list是指同一个对象,
也就是 any_list is num_list。
-------------------------------
for i in num_list:
num_list.remove(i)
print(num_list)
结果你会以为列表内容都被删除了实际上结果是:
[2, 4, 6]
为什么呢?自己好好想想吧,所以要复制一个列表,
又不想改变原列表内容,最好用:
any_list= num_list[:]这是一个浅复制哦!!
如果要循环判断某个条件然后删除列表某些内容,
可以这样:
for i in num_list[:]:
num_list.remove(i)
众所周知元组是不可变的序列:
any_tuple = (1,2,[3,4],5)
any_tuple[2].append('aaa')
print(any_tuple)
执行以上代码会发生什么呢?
自己试一试吧。
所以元组的不可变也是有相对性的!!!
关于深浅复制的问题,深复制并不是完美的解决方案,任何时候都要依据现实情况而定,比如下面这个循环引用:
num_list = [1,2,[3,4],5,6]
any_list = [num_list,'aa','bb']
num_list.append(any_list)
以上是一个循环引用,连我自己看着都晕!!
希望内容可以惊喜到你!!!