[英]Why does assiging a list element to a variable work in a different manner here?
我有这段代码:
lst = [[1,1], [2,1],[3,1]]
n = len(lst)
head = lst[n - 1]
head[0] += 1
lst.append(head)
del lst[0]
print(lst)
我期待这段代码打印: [[2,1], [3,1], [4,1]]
但它正在打印: [[2, 1], [4, 1], [4, 1]].
我不明白为什么。 请帮我。
当您编写head = lst[n - 1]
,会将 head 通过引用设置为 lst 的最后一个元素。 这意味着具有值[3,1]
的对由两个变量共享。 如果您不想更改原始列表中的对,请确保头部复制数据。
head = lst[n - 1].copy()
满足您需求的快速解决方案是
inc_lst = [ [ x[0]+1 , x[1] ] for x in lst]
希望它会有所帮助
当你使用
head = lst[n - 1]
当您执行时,您将参考 [3,1] 作为头部
head[0] += 1
你把 [[1,1], [2,1], [3,1]] 改为 [[1,1],[2,1], [4,1]]
当你追加时,lst 得到了另一个 head 副本。
因此,在 del lst[0] 之后,您得到了结果 [[2,1], [4,1], [4,1]]
lst = [[1,1], [2,1],[3,1]]
n = len(lst)
- n
将等于 3head = lst[n - 1]
=> head = lst[2]
=> head = [3, 1]
head[0] += 1
改变 head, head = [4, 1]
lst.append(head)
,记住lst = [[1, 1], [2, 1], [4, 1]]
和head = [4, 1]
=> [[1, 1], [2, 1 ], [4, 1], [4, 1]]del lst[0]
=> [[2, 1], [4, 1], [4, 1]] 无论如何,当 head 为[3, 1]
您更改 head 并自动更改lst[n - 1]
另外,请尝试使用http://www.pythontutor.com/visualize.html
如果需要逐步了解代码的工作原理,这是一个非常有用的工具。
这实际上是编程初学者(比如我自己)中非常普遍的问题。 其他问题已经回答了这个问题,但我只想提一下,这是“值语义与引用语义”的一个案例。 为了避免将来出现此类错误,简要阅读此主题可能会很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.