码:
>>> a = 1
>>> b = 2
>>> l = [a, b]
>>> l[1] = 4
>>> l
[1, 4]
>>> l[1]
4
>>> b
2
Run Code Online (Sandbox Code Playgroud)
我想要反而看到的是当我将l [1]设置为等于4时,变量b变为4.
我猜测在处理基元时,它们是按值复制的,而不是通过引用复制的.我经常看到人们遇到物体问题,需要了解深层副本等.我基本上想要相反.我希望能够在列表中存储对基元的引用,然后能够通过使用其实际变量名称b或列表中的引用为该变量分配新值l[1].
这可能吗?
Python中没有"原语".一切都是对象,甚至是数字.Python中的数字是不可变对象.因此,要引用一个数字,以便通过多个引用"看到"对"数字"的"更改",引用必须通过例如单个元素列表或具有一个属性的对象.
(这是有效的,因为列表和对象是可变的,并且通过对它的所有引用都可以看到它们保持的数字的变化)
例如
>>> a = [1]
>>> b = a
>>> a
[1]
>>> b
[1]
>>> a[0] = 2
>>> a
[2]
>>> b
[2]
Run Code Online (Sandbox Code Playgroud)
在 Python 中你不能真正做到这一点,但你可以通过创建变量a并b引用可变容器对象而不是不可变数字来接近:
>>> a = [1]
>>> b = [2]
>>> lst = [a, b]
>>> lst
[[1], [2]]
>>> lst[1][0] = 4 # changes contents of second mutable container in lst
>>> lst
[[1], [4]]
>>> a
[1]
>>> b
[4]
Run Code Online (Sandbox Code Playgroud)