python 列表乘一个数字

本文探讨了在Python中使用列表乘法快速复制列表时可能遇到的问题,特别是当列表包含引用类型如列表或类实例时,修改副本会影响原列表,揭示了列表元素的引用行为及其影响。

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

python 列表乘一个数字

在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

因此想要通过列表乘数字快速构建一个列表时, 应当注意列表中的元素是否为引用类型, 如果是数字之类的值类型时则无需在意, 但如果是引用类型时应当小心.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值