Python - 同时声明具有相同值的两个变量

时间:2014-01-21 15:15:54

标签: python python-3.x declaration declare

a=[1,2,3]
b=[1,2,3]

有没有办法在一条线上做到这一点? (显然不是用“;”)

a,b=[1,2,3] 
由于

无效

a,b,c=[1,2,3]

A = 1 B = 2 C = 3

6 个答案:

答案 0 :(得分:10)

In [18]: a,b=[1,2,3],[1,2,3]

In [19]: a
Out[19]: [1, 2, 3]

In [20]: b
Out[20]: [1, 2, 3]

你可能也想这样做:

In [22]: a=b=[1,2,3]

In [23]: a
Out[23]: [1, 2, 3]

In [24]: b
Out[24]: [1, 2, 3]

但请注意,a is b在这种情况下为True,即a只是b的引用

答案 1 :(得分:6)

a,b,c = [[1,2,3] for _ in range(3)]

每个指向不同的对象

答案 2 :(得分:5)

编辑:由DSM找到以便以下行工作,你需要将b声明为一个列表,以便我的代码能够工作(所以这不再是一行,但我会把它留在这里作为一个参考)。根据Paulo Bu

的建议更改了订单
a=[1,2,3]
b=a[:]

旧代码:

b=[]
a=b[:]=[1,2,3]

这会将值分配给b,然后将所有值从b复制到。

如果你这样做:

a=b=[1,2,3]

然后更改

b[1] = 0

a也会改变

答案 3 :(得分:1)

>>> a = b = [1, 2, 3]
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b = [3, 2, 1]
>>> b
[3, 2, 1]
>>> a
[1, 2, 3]

答案 4 :(得分:1)

a,b = [1,2,3],[1,2,3]在一行中完成并指向不同的对象。

a=b=[1,2,3]很清楚但指向同一个对象。

在这两种情况下都尝试a.pop(1),您会看到差异。

答案 5 :(得分:0)

注意......这个解决方案     A = B = [1,2,3]

导致将相同(可变)列表分配给ivar的a和b。原始问题显示2个不同的列表分配给&湾

此解决方案遇到同样的问题:

>>> a,b = ([1,2,3],)*2
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b.append(4)
>>> b
[1, 2, 3, 4]
>>> a
[1, 2, 3, 4]