【问题标题】:Why does a change in nested list doesn't affect the first layers and only the subsequent layers?为什么嵌套列表的更改不会影响第一层而只会影响后续层?
【发布时间】:2022-01-21 00:14:39
【问题描述】:

我只是想知道我们如何获得以下输出。下面给出的是一个 Python 代码:

x=[1,3,6,[18]]
y=list(x)
x[3][0]=15
x[1]=12
print(y)

输出是:

[1,3,6,[15]]

为什么x[1]=12没有在列表y中进行任何更改?但是为什么x[3][0]=15改变了list y中的元素?你能对此给出一个详细而简单的解释吗? 为什么???

【问题讨论】:

    标签: python python-3.x list python-3.8


    【解决方案1】:

    想象每个元素都是一个变量:

    x = [a,b,c,d] # 1,3,6,[18]
    

    你把它复制为y 所以你有

    y = [a,b,c,d] # 1,3,6,[18]
    

    当您执行x[3][0] = 15 时,您正在更改d 的第一个元素。请注意 d 仍然是变量 d,您更改了它的内容,但在两个列表中它仍然是相同的 d

    现在你改变x的第二个元素

    x = [a,e,c,d] # 1,12,6,[15]
    

    y 仍然是

    y = [a,b,c,d] # 1,3,6,[15]
    

    编辑:添加一个非代码示例以使其更清晰

    假设x 是一个列表:

    • 一篇写着1的论文
    • 一篇写着3的论文
    • 一篇写着look at that notebook over there, whatever's in there is my value的论文

    当您将x 复制为y 时,您有:

    • 一篇写有1 的论文(副本)
    • 一篇写着3 的论文(副本)
    • 一篇写着 look at that notebook over there, whatever's in there is my value 的论文(这是一份副本,但都引用了同一个笔记本)

    当您执行 x[2][0] = 1 时,您走到笔记本所在的位置并更改内容,xy 仍然告诉您转到同一个笔记本以了解其中的内容,您没有更改第三卷,你按照它的指示修改了笔记本的内容

    当您执行x[1] = 6 时,您正在使用写有6 的新论文更改x 的第二个元素,但您没有更改y 中的那个,因为它是不同的论文(副本原版)

    【讨论】:

    • 但它没有回答为什么会这样?
    • 不确定你的意思。在x[3][0] 的情况下,您正在更改一些INDISE dd 仍然是对xy 中相同列表的引用。在x[1] 的情况下,您正在替换x 列表中的一个元素,但您没有替换y 的元素。如果不清楚,我可以尝试再举一个例子。
    • 感谢您的澄清。
    猜你喜欢
    • 2018-10-30
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多