Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在这里将列表元素分配给变量的方式不同?_Python_Arrays_List_Variable Assignment - Fatal编程技术网

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
    将等于3
  • head=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]]
  • 无论如何,当head是
    [3,1]
    时,您更改head,它会自动更改
    lst[n-1]

    另外,请尝试使用


    如果需要一步一步地了解代码的工作原理,这是一个非常有用的工具。

    这实际上是编程初学者(比如我自己)经常遇到的问题。其他问题已经回答了这个问题,但我只想指出这是一个“值语义vs引用语义”的案例。为了避免将来出现此类错误,短期内阅读此主题是有用的。

    列表是可变的,您需要做的是
    head=lst[n-1].copy()
    复制最后一个元素