リストの乗算を使用してリストのリストを作成するときは、予期しない変更に注意してください。
単純なリストの乗算を使用してリストのリストを作成します。例:
xs = [[1] * 4] * 3
は、無謀な結果を招く可能性があります。 1 つのサブリスト内の値を変更すると、すべてのサブリストに影響します。
xs[0][0] = 5 print(xs) # [[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
乗算演算子 は、式ではなくオブジェクトに作用します。したがって、 [[1] * 4] * 3 は、評価されたサブリスト [1, 1, 1, 1] を 3 回だけ参照します。新しいサブリストを作成する代わりに、 は既存のサブリストへの参照を作成します。
この動作を回避し、独立したサブリストを確保するには、リスト内包表記を使用します。
xs = [[1] * 4 for _ in range(3)]
この式は反復ごとに [1] * 4 を再評価し、結果として異なる結果が得られます。
Python の整数は不変であることに注意することが重要です。これは、整数には変更可能な value 属性がないため、
1.value = 2
のような操作が無効であることを意味します。したがって、[1] * 4 は整数自体をコピーしていませんが、整数は変更できないので問題ありません。
以上がPython でリスト乗算によって共有サブリストが作成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。