示例:
Variable = 1
List = [0, Variable, 2, 3]
Variable = 5
print(List)
输出结果为[0, 1, 2, 3]。除了重新定义列表外,是否有其他方法可以得到[0, 5, 2, 3]?此外,是否可以反向进行(即List [1] = 5,使Variable == 5)?
Variable = 1
List = [0, Variable, 2, 3]
Variable = 5
print(List)
输出结果为[0, 1, 2, 3]。除了重新定义列表外,是否有其他方法可以得到[0, 5, 2, 3]?此外,是否可以反向进行(即List [1] = 5,使Variable == 5)?
不能直接实现。列表不会知道重新分配的情况,也没有办法拦截重新分配并进行一些元编程(*除了错误,请参见注释)。如果Variable
是容器,则可以更新其内容,并且两者都可以看到。例如,它可以是dict
或list
。但是使用类是一种方便的方法。在此简单示例中,所有用户都必须知道使用variable.val
,但您也可以将时间投入到实现所有dunder方法以抽象化这一点。
class Variable:
def __init__(self, val):
self.val = val
variable = Variable(1)
my_list = [0, variable, 2, 3]
variable.val += 1
my_list[1].val += 1
print(variable.val)
Variable
并将其初始化为1。然后您在列表中使用它。现在您的列表包含值0、Variable、2、3,这与包含值0、1、2、3的列表相同。现在您更新了名为Variable
的变量,并将其更改为5。您看,您更新了变量,但没有更新列表... 列表没有使用变量,因此它从该变量中提取了所需的数据,即数字1... 因此,就好像您从未放置过名为Variable
的变量一样,就好像您只是放置了数字1... 因此,当您更新变量时,列表只是像这样查看它:“那个包裹不是给我的,我已经拿到我的了!”现在足够的废话...下面是解决方案!首先,在创建列表后,如果您知道要更新特定值,请将其存储在变量中:Variable = 1
List = [0, Variable, 2, 3]
Variable = List[1]
Variable = 1
List = [0, Variable, 2, 3]
Variable = List[1]
Variable = 5
print(List)
Python变量保存值的引用。
变量 = 1 列表 = [0,变量,2,3]
在您的列表中,传递变量引用而不是值本身。
列表[1] = 变量