生成一个矩阵(列表内列表,包括 [[]]),复制内容到另一个变量时,虽然 identity 不同,但是内容更改之后还是会联动
>>> n = 2
>>> M = [[0 for _ in range(n)] for _ in range(n)]
>>> m = list(M)
>>> m
[[0, 0], [0, 0]]
>>> M
[[0, 0], [0, 0]]
>>> m[0][0] = 1
>>> m
[[1, 0], [0, 0]]
>>> M
[[1, 0], [0, 0]]
>>>
>>> id(m)-id(M)
1152
将 m = list(M)
换成 m = M[:]
或者 m = M.copy()
也没用
不用列表解析式手打也是一样
>>> M=[[1,2],[]]
>>> m = M.copy()
>>> m
[[1, 2], []]
>>> M
[[1, 2], []]
>>> m[0][0] = 3
>>> m
[[3, 2], []]
>>> M
[[3, 2], []]
>>>
>>> id(m)-id(M)
960
算法作业查了半个小时才查到这有问题……
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.