python 列表乘一个数字

探讨Python中使用列表乘法创建新列表时的意外行为,特别是当列表元素为引用类型时,修改一个元素可能会影响所有副本,解释了底层内存地址的原因。

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

在python中, 如果用一个列表list1乘一个数字n 会得到一个新的列表list2, 这个列表的元素是list1的元素重复n次, 例如

list1 = [0]
list2 = list1 * 5        # list2 = [0, 0, 0, 0, 0]

但如果list1中的元素是引用类型, 比如列表时, 就会发生一些意料之外的事

list1 = [[0, 0]]
list2 = list1 * 2        # list2 = [[0, 0], [0, 0]]
list2[0][0] = 1            # list2 = [[1, 0], [1, 0]]
print list1                # list1 = [[0, 0], [0, 0]]


在修改list2[0][0]时, list2[0][1] 同样被修改了, 这是因为list2[0]与list2[1]有相同的地址, 修改任意一维都会影响到其他维

id(list2[0]) == id(list2[1])        # True

函数id()可以获得一个变量的地址

同样如果列表元素是一个类的实例时, 也会受到影响

class A():
    value = 10
a = A()
list1 = [1]
list2 = list1 * 2
print list1[0].value                    # 10
print list2[0].value list2[1].value        # 10 10

list2[0].value = 100
print list1[0].value                    # 100
print list2[0].value list2[1].value        # 100 100

因此想要通过列表乘数字快速构建一个列表时, 应当注意列表中的元素是否为引用类型, 如果是数字之类的值类型时则无需在意, 但如果是引用类型时应当小心.
————————————————
版权声明:本文为优快云博主「cjj_2811651110」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/hq_cjj/article/details/86659589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值