簡體   English   中英

Python: `a,b=[1,2],a` 和 `a=[1,2] 的區別; b=a`?

[英]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]被分配給aa的 part_1 值被分配給b ,即[1,2,3] 由於這個原因,您將獲得[1, 2, 3], [1, 2, 3]ab

現在,如果您嘗試單獨運行 part_2,您將遇到nameError ,因為在 part_2 中, a=[1,2]b=a同時被執行。 這意味着a在分配給變量b時尚未分配給[1,2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM