为了账号安全,请及时绑定邮箱和手机立即绑定

for循环中的Python分配(理论澄清)

for循环中的Python分配(理论澄清)

Smart猫小萌 2021-04-09 18:15:45
我需要弄清楚这里发生了什么,真正的原因是什么: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


查看完整回答
反对 回复 2021-04-20
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

在第一种情况下,pyhton为列表中的每个值创建一个新变量,并且不对变量应用旧引用。但是在第二种情况下,python会为列表整体创建一个新变量,但不会为每个变量生成一个新变量。因此,列表中元素的引用保持不变并更改了该特定元素。在第三种情况下,它会像第二种情况一样创建一个变量,并整体上更改变量,但不会更改每个元素的值。


查看完整回答
反对 回复 2021-04-20
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号