我可以 link 两个变量,使得在 python 中一个是另一个的两倍吗?

Can I link two variables such that one is double of another in python?

所以基本上我有两个列表 ab 并将它们定义为 a=b=[10] 所以改变一个会改变另一个 -

a=b=[10]
a[0]+=1
a
>>>[11]
b
>>>[11]

有没有办法做到这一点,而是让它给出双倍的变量?期望的输出 -

a=b=[10]
#some code
a
>>>[10]
b
>>>[20]

我不确定我是否正确理解了您要尝试做的事情,但像这样的事情应该可行。

prop = property(lambda self: self.a * 2)
# Dynamically creating a class with a default value for `a` and `b`
Class = type('ClassName', (object,), {"a": 0, "b": prop})

c = Class()
c.a = [10]
print(c.a, c.b)  # ([10], [10, 10])

对于 a=b=[0],您实际上没有两个列表。赋值只是复制对列表的引用,而不是实际的列表,所以 liat 'a' 和 list 'b' 在赋值后都引用同一个列表。

a=b=[10]
print(a) // [10]
b = list(a)[0] * 2 
a[0] += 1

print(a) // [11]
print(b) // [20]

要将 a 实际复制到 b,您有多种选择,最简单的方法是使用内置的 list() 函数进行实际复制。 谢谢。

因为 a=b=[10] 等于 b=[10];a=b 所以它们是同一件事,只有一个实例。 你可以

b=[a[0]*2] 

b=[x*2 for x in a]

您可以创建一个继承自 list 的新 class 并创建一个 returns 修改值的 property

class new_list(list):
    @property
    def double(self):
        return [i * 2 for i in self]

        
a = new_list([10])

a.append(20)
a.append(30)
print(a, a.double)
[10, 20, 30] [20, 40, 60]

这种方法的优点是您仍然可以直接使用 list 中的所有方法。