Python二维列表赋值异常咨询:为何ans[0][0] +=1影响多个元素?
问题原因及解决方法
问题根源
你遇到的问题本质是列表引用复用。如果你的代码是通过ans = [[0,0]] * 2这种方式创建二维列表的,那么*操作符并不会生成新的子列表,只是把同一个[0,0]列表的引用复制了两次。也就是说ans[0]和ans[1]指向的是内存中同一个列表对象,修改其中一个的元素,另一个必然同步变化。
(注:如果直接写ans = [[0,0],[0,0]]是不会出现这个问题的,因为两个子列表是独立的对象,所以推测你实际创建列表的方式是用了*重复操作符)
正确写法
有两种可靠的方式创建包含独立子列表的二维数组:
- 显式声明每个独立子列表:
ans = [[0, 0], [0, 0]]
- 使用列表推导式生成每个子列表(适合规模较大的数组):
# 生成2行2列的二维列表 ans = [[0, 0] for _ in range(2)] # 更通用的m行n列写法 ans = [[0 for _ in range(2)] for _ in range(2)]
验证:执行ans[0][0] += 1后,结果为[[1, 0], [0, 0]],完全符合预期。
内容的提问来源于stack exchange,提问作者S0ma
相关产品推荐
相关产品推荐

