gpt4 book ai didi

python - 为什么当我 append 到元组内部的列表时,元组的内容会发生变化,但当我更新变量时却不会发生变化?

转载 作者:太空狗 更新时间:2023-10-29 21:21:16 26 4
gpt4 key购买 nike

myVar = ["jhhj", "hgc"]
myTuple = ([1,2,3], [4,5,6], myVar)
myVar.append('lololol')
print myTuple

为什么以及如何在构造后通过追加来修改这个元组?

myVar = "lol"
myTuple = ([1,2,3], [4,5,6], myVar)
myVar = "lolol"
print myTuple

为什么这会打印出 ([1,2,3], [4,5,6], "lol") 而不是 ([1,2,3 ], [4,5,6], "lolol")?

最佳答案

好吧,让我试着用一些图片来解释。

在 Python 中,一切皆对象。这些对象由变量引用。某些类型的对象(例如列表和元组)仅存储对其他对象的引用。

也就是说,当你执行

myVar = ["jhhj", "hgc"]
myTuple = ([1,2,3], [4,5,6], myVar)

你或多或少会遇到这种情况:

A tuple pointing to three lists; a list pointing to two strings

每个对象都由一个框/矩形表示。我们有两个字符串对象,"jhhj""hgc"。此外,我们还有一个列表对象,由变量 myVar 指向;此列表对象指向两个字符串对象。此外,我们还有一个元组对象,由 myTuple 引用;此元组对象指向另外两个列表和 myVar 引用的列表。

当你执行

myVar.append('lololol')

会发生什么?好吧,列表对象(由 myVar 顺便指出)开始引用另一个值,字符串对象 "lololol":

A tuple pointing to three lists; a list pointing to two strings; a new string is added to the list

请注意,myVar 仍然引用列表对象。发生的事情是列表对象改变了。您可以从 myVar 或元组中查看此列表对象,您将看到具有相同更改的相同对象。

OTOH,当你执行

myVar = "lol"
myTuple = ([1,2,3], [4,5,6], myVar)

你得到这样的东西:

A tuple pointing to two lists and a string, also pointed by a variable

现在 myVar 指向字符串对象 "lol",并且元组在它的第三个位置引用它。现在,如果你执行

myVar = "lolol"

你只是让 myVar 指向另一个对象。元组对象仍然像以前一样指向 "lol":

A tuple pointing to two lists and a string, also pointed by a variable. The variable now references another string.

所以,如果你给一个变量赋予一个新值,它只会改变这个变量指向的值。变量引用的先前值将仍然存在*,并且指向它的任何其他变量或对象将继续指向它。只有属性变量会改变。

另外,I answered a vaguely related question some time ago .您可能会发现答案很有帮助。

* 除非它被垃圾收集器收集,但这是另一个漫长的历史。

关于python - 为什么当我 append 到元组内部的列表时,元组的内容会发生变化,但当我更新变量时却不会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11026011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com