You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中两种二维列表初始化方式的差异咨询

两种二维列表初始化方式的核心区别

方式1:嵌套列表推导式

temp = [[-1 for y in range(k + 1)] for x in range(n + 1)]
  • 外层列表推导式的每一次迭代,都会生成一个全新的内层列表。最终temp里的每个子列表都是内存中独立的对象,彼此毫无关联。修改任意一个子列表的元素,不会影响其他子列表的内容,这也是它能符合预期的原因。

方式2:多重乘法初始化

temp = [[-1]*(k+1)]*(n + 1)
  • 这个操作分两步:首先[-1]*(k+1)创建出一个内层列表;然后*(n+1)并没有生成新的内层列表,只是把同一个内层列表的引用重复了n+1次,塞进外层列表里。也就是说,temp里的所有子列表本质上指向内存中同一个列表对象。一旦修改任意一个子列表的元素,所有子列表都会同步变化——因为它们本来就是同一个东西,这就是程序行为异常的根源。

举个直观的例子,假设n=2,k=1:

  • 方式1创建的temp是 [[-1, -1], [-1, -1], [-1, -1]],三个子列表完全独立;
  • 方式2创建的temp看似结构相同,但三个子列表共享同一块内存,修改temp[0][0] = 0后,整个temp会变成 [[0, -1], [0, -1], [0, -1]]。

内容的提问来源于stack exchange,提问作者Naveen Pragathesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 17:52:01