[英]Difference between max([a for a in [1,2]]) and max(a for a in [1,2]) in Python 3
[英]Python: difference between `a,b=[1,2],a` and `a=[1,2]; b=a`?
以我的理解,上面兩段代碼應該是一樣的效果。 但是為什么當我讓一個點指向另一個數組時,結果可能不同呢? 下面的代碼說明了區別:
# part 1
a=[1,2]
b=a
a=a+[3] # a points to a new array. b should still points to [1,2]
print(a, b) # [1, 2, 3] [1, 2]. My expected result.
# part 2
a,b=[1,2],a
a=a+[3] # a points to a new array. b should still points to [1,2]
print(a, b) # [1, 2, 3] [1, 2, 3]. Why the result is different from the above?
我對第 2 部分的結果感到驚訝。有人可以解釋為什么結果不同嗎? 非常感謝您!
編輯:非常感謝大家! 現在我明白了問題所在! 非常感謝!
您需要在隔離環境中運行測試。 您的“第 2 部分”測試正在從“第 1 部分”中獲取a
值。
線
a,b=[1,2],a
將[1,2]
分配給a
,並將 a 的先前值分配a
b
。
這意味着b
將具有a
的先前值,即[1, 2, 3]
您需要了解操作順序。
表達式[1,2],a
正在構建一個包含兩個元素的元組。 第一個元素是列表[1,2]
,第二個元素是在第 1 部分中設置為[1,2,3]
的a
的現有值。
現在該元組已通過賦值解包,因此a = [1,2]
和b=[1,2,3]
。
然后你修改a
所以它恰好與b
相同。
如果您在測試的兩個部分中使用不同的常量,整個過程會更加清晰。
# a=[1,2,3] from part 1
a,b=[4,5],a
a=a+[6]
print(a,b) # [4, 5, 6] [1, 2, 3]
好吧, a
已經是“第 1 部分”中的[1, 2, 3]
,所以當您將它分配給“第 2 部分”中的b
時,當然b
將是[1, 2, 3]
...
你一次運行整個代碼嗎? 如果你這樣做,混亂就很容易解釋了。
當您在第二部分中設置 b = a 時,它采用實際的 a 值,由於第一部分,它是 [1,2,3]。
發生這種情況是因為您在同一環境中同時運行 part_1 和 part_2。 現在在這一行a, b = [1,2], a
列表[1,2]
被分配給a
但a
的 part_1 值被分配給b
,即[1,2,3]
。 由於這個原因,您將獲得[1, 2, 3], [1, 2, 3]
的a
和b
。
現在,如果您嘗試單獨運行 part_2,您將遇到nameError
,因為在 part_2 中, a=[1,2]
和b=a
同時被執行。 這意味着a
在分配給變量b
時尚未分配給[1,2]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.