1. ホーム
  2. python

理解する *x ,= lst

2023-10-29 07:49:52

質問

古いコードを調べていて、それが何をするものなのかを理解しようとしているのですが、この奇妙な文に出くわしました。

*x ,= p

p はこの文脈ではリストです。私はこのステートメントが何をするのか理解しようとしました。私が知る限りでは、それは単に x の値に p . 例えば

p = [1,2]
*x ,= p    
print(x)

を与えるだけです。

[1, 2]

とは違うのでしょうか? x = p ? この構文が何をしているのか、何か思い当たることはありますか?

どのように解決するのですか?

*x ,= p は基本的に難読化された x = list(p) を使って 拡張反復処理可能なアンパッキング . の後のカンマは x の後のカンマは、代入先をタプルにするために必要です(リストにもなりえますが)。

*x, = p とは異なり x = p とは異なり、前者は コピー p (つまり新しいリスト) を作成するのに対して、後者は 参照 を作成するのに対して、後者は元のリストへの参照を作成します。説明するために

>>> p = [1, 2]
>>> *x, = p 
>>> x == p
True
>>> x is p
False
>>> x = p
>>> x == p
True
>>> x is p
True