|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- matrix = [[0] * 3] * 3
- matrix[0][0] = 1
- print(matrix)
复制代码
我以为这段代码的输出应该是:[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
但事实上,输出却是:[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
这是为啥呢?
想破头了也想不出
这个问题出在Python对列表(list)的处理方式上。在Python中,列表是可变的(mutable),当你创建一个由列表构成的列表(即二维列表)时,Python中的“乘法”操作其实创建的是对原列表的引用,而非复制整个列表。
因此, matrix = [[0] * 3] * 3 这行代码实际上创建的是一个由三个相同的列表引用构成的列表。也就是说, matrix[0] , matrix[1] 和 matrix[2] 其实是同一个列表。所以,当你修改其中一个列表的元素时(例如执行 matrix[0][0] = 1 ),所有的列表都会被改变。
如果你想要创建一个每个元素都是独立的二维列表,你需要创建每个子列表的新的副本,而不是引用。你可以使用列表推导式(list comprehension)来实现这个功能:
- matrix = [[0] * 3 for _ in range(3)]
- matrix[0][0] = 1
- print(matrix)
复制代码
这段代码会得到你预期的输出: [[1, 0, 0], [0, 0, 0], [0, 0, 0]] 。因为在这里, [0] * 3 在每次循环中都会创建一个新的列表。
|
|