关于python一些bug似的特性,基础篇

本文深入探讨了Python中序列的操作特性,特别是列表与元组的可变性和不可变性,包括循环引用的问题及如何正确地复制列表等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写给喜欢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)
以上是一个循环引用,连我自己看着都晕!!

希望内容可以惊喜到你!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~白+黑

真乃人中龙凤,必成大器,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值