Python 为什么在这里将列表元素分配给变量的方式不同?
我有一段代码:Python 为什么在这里将列表元素分配给变量的方式不同?,python,arrays,list,variable-assignment,Python,Arrays,List,Variable Assignment,我有一段代码: 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的最后一个元素。这意味着两个变量共享值为[
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]]表示lst中的x]
希望它能在您使用时有所帮助
head = lst[n - 1]
当执行时,您将引用[3,1]作为头
head[0] += 1
您将[[1,1]、[2,1]、[3,1]]更改为[[1,1]、[2,1]、[4,1]]
当你做append时,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
it改变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]]dellst[0]
=>[[2,1]、[4,1]、[4,1]][3,1]
时,您更改head,它会自动更改lst[n-1]
另外,请尝试使用
如果需要一步一步地了解代码的工作原理,这是一个非常有用的工具。这实际上是编程初学者(比如我自己)经常遇到的问题。其他问题已经回答了这个问题,但我只想指出这是一个“值语义vs引用语义”的案例。为了避免将来出现此类错误,短期内阅读此主题是有用的。列表是可变的,您需要做的是
head=lst[n-1].copy()
复制最后一个元素