【python语法 [[]]*4 和 [[] for _ in range(4)] 的区别】

直接看几个示例,对比这两种方法直接的不同

  • 数字number类
a = [4] * 4
a[0] = 8
a # [8, 4, 4, 4]
a = [4 for _ in range(4)]
a[0] = 8
a # [8, 4, 4, 4]
  • 列表
a = [[]] * 4
a[0].append(4)
print(a)  # [[4], [4], [4], [4]]
a = [[] for _ in range(4)]
a[0].append(4)
print(a)  # [[4], [], [], []]
  • 字典
a = [{}] * 4
a[0]['a'] = 'a'
print(a) # [{'a': 'a'}, {'a': 'a'}, {'a': 'a'}, {'a': 'a'}]
a = [{} for _ in range(4)]
a[0]['a'] = 'a'
print(a) # [{'a': 'a'}, {}, {}, {}]

》》 非纯数字的列表初始化,不能用【[[]]*12】 这种结构


详细解释

[[]] * 4 是 Python 中的一种语法,用于创建一个包含多个引用同一列表的嵌套列表

具体解释如下:

a = [[]] * 4

这行代码的含义是:

  1. []:创建一个空列表。
  2. [[]]:创建一个包含一个空列表的列表,即嵌套一层。
  3. [[]] * 4:将这个列表复制 4 次,但是复制的是引用(指针),不是深拷贝。

最终结果是:

a = [[], [], [], []]

乍看之下这没问题,但四个元素其实都引用的是同一个空列表对象

验证一下:

a[0].append(1)
print(a)  # 输出:[[1], [1], [1], [1]]

你对任何一个元素做修改,其他元素都会变化,因为它们是同一个列表对象的引用。


正确做法(如果你想要4个独立的空列表):

a = [[] for _ in range(4)]

这样每个元素都是独立的新空列表。

如果你想进一步理解列表引用和复制的原理,我可以给你一些 代码示例 或 图示说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

放飞自我的Coder

你的鼓励很棒棒哦~

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

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

打赏作者

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

抵扣说明:

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

余额充值