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

Python中两种二维数组创建方式的区别是什么?

两种Python二维数组创建方式的核心区别

嘿,这个问题真的戳中了Python新手很容易踩的一个坑!咱们直接拆解这两种写法的本质差异:

1. 问题出在第二种写法:myList = [[None]*column]*row

这种方式看起来简洁,但其实藏着大问题——所有行都是同一个列表的引用!

咱们来拆解一下:

  • 首先[None]*column创建了一个包含column个None的列表;
  • 然后*row是把这个列表的引用重复了row次,也就是说,你的myList里的每一行,指向的都是内存中同一个列表对象。

举个实际的例子就懂了:

myList = [[None]*3]*2
print(myList)  # 输出: [[None, None, None], [None, None, None]]
myList[0][0] = "修改"
print(myList)  # 输出: [["修改", None, None], ["修改", None, None]]

看到没?改第一行的第一个元素,第二行的对应位置也跟着变了——因为它们根本就是同一个列表!

2. 第一种写法才是正确的:myList = [[None]*column for i in range(row)]

这种用列表推导式的写法,每一行都是独立的新列表。

列表推导式会循环row次,每次循环都会重新执行[None]*column,创建一个全新的列表对象,然后把这些新列表收集起来组成二维数组。

同样用上面的例子测试:

myList = [[None]*3 for i in range(2)]
print(myList)  # 输出: [[None, None, None], [None, None, None]]
myList[0][0] = "修改"
print(myList)  # 输出: [["修改", None, None], [None, None, None]]

这次只有第一行的元素被修改,第二行完全不受影响,这才是我们想要的二维数组效果。

总结一下核心差异

  • [[None]*column]*row:复制的是列表引用,所有行共享同一个列表,修改一行会影响所有行;
  • [[None]*column for i in range(row)]:每次循环创建新列表,各行相互独立,修改某一行不会影响其他行。

内容的提问来源于stack exchange,提问作者Anil Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:58