Pythonの代入文では、複数の値を複数の名前にバインドできます。
a, b = 1, 'foo'
この用法は、通常の1つの名前への代入と連ねて使用することも可能です。
a, b = c = 1, 'foo'
上記の代入文では、c
はtuple
型の(1, 'foo')
を指します。
個別の値と、値のシーケンスの両方に名前を付けたいときに簡潔に記述できて便利です。
c
をtuple
ではなく、list
で取得したい場合、次のように書きます。
a, b = c = [1, 'foo']
代入を連ねた用法を使用する際に、値がmutableの場合は注意が必要です。例えば次のような場合で、list
オブジェクトの['foo']
がmutableです。
a, b = c = 1, ['foo']
この例の場合、b
は、['foo']
を、c
は、(1, ['foo'])
を指していますが、これらの['foo']
は同じlist
オブジェクトを指しています。ですので、
b.append('bar')
とすると、b
もc[1]
も、['foo', 'bar']
に変わります。従って、c
は、(1, ['foo', 'bar'])
となります。