在Python中存储对基本类型的引用?

fdm*_*ion 5 python reference

码:

>>> 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].

这可能吗?

Pat*_*shu 6

Python中没有"原语".一切都是对象,甚至是数字.Python中的数字是不可变对象.因此,要引用一个数字,以便通过多个引用"看到"对"数字"的"更改",引用必须通过例如单个元素列表或具有一个属性的对象.

(这是有效的,因为列表和对象是可变的,并且通过对它的所有引用都可以看到它们保持的数字的变化)

例如

>>> a = [1]
>>> b = a
>>> a
[1]
>>> b
[1]
>>> a[0] = 2
>>> a
[2]
>>> b
[2]
Run Code Online (Sandbox Code Playgroud)


mar*_*eau 5

在 Python 中你不能真正做到这一点,但你可以通过创建变量ab引用可变容器对象而不是不可变数字来接近:

>>> 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)