为什么将列表元素分配给变量在这里以不同的方式工作?
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 复制数据。
head = lst[n - 1].copy()
满足您需求的快速解决方案是
inc_lst = [ [ x[0]+1 , x[1] ] for x in lst]
希望对你有所帮助
当你使用
head = lst[n - 1]
当你执行
时,你得到了引用 [3,1] 作为 head
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
将等于 3
head = lst[n - 1]
=> head = lst[2]
=> head = [3, 1]
head[0] += 1
它换头了,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
如果需要逐步了解代码的工作原理,这是一个非常有用的工具。
这其实是编程初学者(比如我)中非常普遍的问题。其他问题已经回答了这个问题,但我只想提一下,这是 "value semantics vs reference semantics" 的情况。快速阅读此主题可能很有用,以避免将来出现此类错误。
我有这段代码:
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 复制数据。
head = lst[n - 1].copy()
满足您需求的快速解决方案是
inc_lst = [ [ x[0]+1 , x[1] ] for x in lst]
希望对你有所帮助
当你使用
head = lst[n - 1]
当你执行
时,你得到了引用 [3,1] 作为 headhead[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 = [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
如果需要逐步了解代码的工作原理,这是一个非常有用的工具。
这其实是编程初学者(比如我)中非常普遍的问题。其他问题已经回答了这个问题,但我只想提一下,这是 "value semantics vs reference semantics" 的情况。快速阅读此主题可能很有用,以避免将来出现此类错误。