ホームページ >バックエンド開発 >Python チュートリアル >Python でリスト乗算によって共有サブリストが作成されるのはなぜですか?

Python でリスト乗算によって共有サブリストが作成されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-23 12:55:101045ブラウズ

Why Does List Multiplication Create Shared Sublists in Python?

リストのリストの予期しない変更

リストの乗算を使用してリストのリストを作成するときは、予期しない変更に注意してください。

問題の説明

単純なリストの乗算を使用してリストのリストを作成します。例:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。