Python 不可变引用集合

标签 python reference mutation

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 中的数字是可变的,我的第一个示例将会工作。 IE。如果重新分配(例如:b = 3)意味着“改变我们通过标签“b”引用的对象的内存”。

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

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

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

最佳答案

在打印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 中使用引用那样来做到这一点。 当您将整数放入列表时,列表将保存该整数的副本。整数最初是变量、文字值、函数调用的结果还是其他东西并不重要;当列表看到它时,它只是一个整数值。

关于Python 不可变引用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57923735/

相关文章:

python - “元组”不可调用错误

python - 基础 Python : Rank items in list

java - 变异参数是否总是会引入依赖于顺序的行为?

python - Pandas : dropping multiple columns and keeping only ones with numeric data

python - 如何获得船上创建的矩形的周长

javascript - 从另一个 .js 文件调用外部 .js 文件中的函数

objective-c - 枚举 : safe? 时删除 Cookie

python,如何通过改变其格式来更新字典?

apache-flex - 在哪个事件阶段,父类(super class)可以引用其派生类中潜在的现有组件?

c++ - 在 C++ 中使用 new 创建引用