首页 > 解决方案 > 变量何时存储值,何时存储引用?

问题描述

变量存储参考:

a = [3, 4]
list1 = [1, 2, a]
list1[2][0]=5
print(list1)
print(a)

输出:

[1, 2, [5, 4]]

[5, 4]

变量存储值:

a = 3
list1 = [1, 2, a]
list1[2]=5
print(list1)
print(a)

输出:

[1, 2, 5]

3

有没有我能记住的规则?因为有时我必须间接操纵变量,我不知道它是否会改变原始变量。

标签: python

解决方案


变量总是存储一个引用。

混淆的关键可能是引用的对象是否可变。在您的第一个示例a中,存储对可变列表对象的引用。在第二个示例a中,存储了对类型不可变对象的引用int

所以这个操作:

list1[2][0] = 5

修改存储在引用的列表中的a引用。因此,当您通过存储在a.

但是这个操作:

list1[2] = 5

修改列表元素(从 初始化a),现在该元素存储对新对象的引用。但是存储在其中的引用a没有改变,因此你得到了结果。


推荐阅读