首页 > 解决方案 > 对不可变对象的引用的 Python 集合

问题描述

python中有没有办法获取引用列表?意思是,当我更改其中一个内部事物时会自动更改的事物集合,而无需引用集合本身。

允许我在示例中展示的内容

# What happens
a = 1
b = 2
L = [a, b]
print(L) # [1, 2]

b = 3
print(L) # [1, 2]


# I would like to have something like
a = 1
b = 2
ra = ref(a)
rb = ref(b)
L = [ra, rb]
print(L) # [1, 2]

b = 3
print(L) # [1, 3]

编辑如果数字在 python 中是可变的, 我的第一个示例将起作用。即,如果重新分配(例如b = 3:)意味着“改变我们通过标签'b'引用的对象的内存”。

我的第一个示例使用列表的可变元素(例如,如果我构建一个列表列表,然后变异-无需重新分配!-内部列表)。

因此,更具体地说,我的问题是:当集合包含不可变元素时,我们是否有机会发生这种行为?

(特别是我对可调用列表感兴趣)。

标签: pythonreferencemutation

解决方案


在打印 L 的新值之前,将值 b 再次存储在 L 中,请找到以下代码:

a = 1
b = 2
L = [a, b]
print(L) # [1, 2]
b = 3
L=[a, b]
print(L) # [1, 3]

但这种方法效率不高。更新List项的方式只有索引。如下:

a = 1
b = 2
L = [a, b]
print(L) # [1, 2]
b = 3
L[1]=b
print(L) # [1, 3]

我们无法像您尝试在 Python 中使用引用那样做到这一点。当您将整数放入列表中时,列表会保存该整数的副本。整数最初是变量、文字值、函数调用的结果还是其他东西都没有关系;当列表看到它时,它只是一个整数值。


推荐阅读