Web*_*ter 7 python tuples list append variable-assignment
myVar = ["jhhj", "hgc"]
myTuple = ([1,2,3], [4,5,6], myVar)
myVar.append('lololol')
print myTuple
Run Code Online (Sandbox Code Playgroud)
为什么以及如何通过在施工后附加来修改这个元组?
myVar = "lol"
myTuple = ([1,2,3], [4,5,6], myVar)
myVar = "lolol"
print myTuple
Run Code Online (Sandbox Code Playgroud)
为什么打印出来([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)
Run Code Online (Sandbox Code Playgroud)
您或多或少会遇到这种情况:

每个对象由一个框/矩形表示.我们有两个字符串对象,"jhhj"和"hgc".另外,我们有一个由变量指向的列表对象myVar; 此列表对象指向两个字符串对象.此外,我们有一个元组对象,引用myTuple; 这个元组对象指向另外两个列表和引用的列表myVar.
当你执行
myVar.append('lololol')
Run Code Online (Sandbox Code Playgroud)
会发生什么?好吧,列表对象(顺便指出myVar)开始引用另一个值,即字符串对象"lololol":

请注意,myVar仍然引用列表对象.发生的事情是列表对象发生了变化.您可以myVar从元组中查看此列表对象,您将看到具有相同更改的相同对象.
OTOH,当你执行时
myVar = "lol"
myTuple = ([1,2,3], [4,5,6], myVar)
Run Code Online (Sandbox Code Playgroud)
你得到这样的东西:

现在myVar指向字符串对象"lol",以及元组在其第三个位置引用它.现在,如果你执行
myVar = "lolol"
Run Code Online (Sandbox Code Playgroud)
你只是myVar指向另一个对象.元组对象仍然"lol"像以前一样指向:

因此,如果将新值归因于变量,则只会更改此变量指向的值.变量引用的先前值仍然存在*,指向它的任何其他变量或对象将保持指向它.只是属性变量会改变.
PS:此外,我前段时间回答了一个含糊不清的问题.您可能会发现答案很有帮助.
*除非它是由垃圾收集器收集,但这是另一个漫长的历史.
python中的所有东西都是对象.
所以当你做原始作业时
myVar = "lol"
你给myVar一个对象"lol"的引用
然后创建一个元组.第三个插槽中的这个元组引用了"lol"
然后你创建一个新对象"lolol"并给myVar一个引用它.元组保留其原始引用"lol"