我需要弄清楚这里发生了什么,真正的原因是什么:array = [0, 1, 2]for element in array: element += 1print array #CHANGES NOTHINGdouble_array = [[0,1], [2,3]]for element in double_array: element[0] = "Changed!"print double_array #THIS WORKSfor element in double_array: element = ["Doesn't work!"]print double_array #NOPE我很直观地理解这一点,但是我不确定其背后的理论。我的感觉是,python中的变量名是这种空灵的东西,如果直接在其后加上“ =”,它会立即崩溃。如果变量引用列表,则可以在其后使用“ .append”,也可以在其后使用“ [0] =“,它的作用类似于C中的引用,但是如果直接为其分配内容,则python就像,“哦,您不再需要此名称了吗?好吧,现在它仅指代您分配给它的东西,而没有别的东西了”。特别是,对于我的第一个案例,“整数是不可变的”对我来说似乎是错误的。在我的第三种情况下,列表似乎与整数一样不可变。对此的正确解释是什么?
2 回答

温温酱
TA贡献1752条经验 获得超4个赞
在Python中,每一个变量,数组元素和属性是一个参考,而唯一的东西=
,+=
,-=
等有能力做的是改变什么了左侧指。请注意,任何其他操作都将直接作用于所引用的值,例如.
((左侧引用的对象的查找属性)或[]
(由左侧引用的list / dict的查找元素)左手边)。
如果您想用C来理解Python,请记住以下几点:
在Python中,没有诸如原始数据类型或原始类型的变量之类的东西
赋值始终会影响变量所指的内容,就像在C中赋值给指针一样
任何其他操作都会使用和/或影响参考值,因此您可以将其视为自动取消参考。特别是
a.b
对应于a->b
或(*a).b
。

蝴蝶不菲
TA贡献1810条经验 获得超4个赞
在第一种情况下,pyhton为列表中的每个值创建一个新变量,并且不对变量应用旧引用。但是在第二种情况下,python会为列表整体创建一个新变量,但不会为每个变量生成一个新变量。因此,列表中元素的引用保持不变并更改了该特定元素。在第三种情况下,它会像第二种情况一样创建一个变量,并整体上更改变量,但不会更改每个元素的值。
添加回答
举报
0/150
提交
取消