ホームページ  >  記事  >  バックエンド開発  >  入れ子になったリスト要素を変更すると、Python のすべてのサブリストに影響するのはなぜですか?

入れ子になったリスト要素を変更すると、Python のすべてのサブリストに影響するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 04:34:02261ブラウズ

Why Does Modifying a Nested List Element Affect All Sublists in Python?

ネストされたリストのインデックス

Python でネストされたリストを操作する場合、リスト参照の概念とそれがリスト インデックスに与える影響を理解することが重要です。 .

リスト参照

変数を値で渡す多くのプログラミング言語とは異なり、Python はリストを参照で渡します。これは、リストを別の変数に割り当てると、メモリ内に同じ基になるリスト オブジェクトへの参照が作成されることを意味します。

Nested List Indices

提供されたコードでは、問題が発生します。リスト乗算の使用から。 some_list = 4 * [(4 * [0])] という行は、同じリスト オブジェクトへの 4 つの参照を作成します。つまり、サブリストの 1 つに対する変更は 4 つすべてに影響します。

期待される結果

期待される結果は次のとおりです:

[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

実際の結果

実際の結果は次のとおりです:

[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

解決策

この問題を回避するには、ループを使用して、同じリストへの複数の参照を作成せずにネストされたリストを作成します。修正されたコードは次のとおりです。

some_list = [(4 * [0]) for _ in range(4)]

このループは、それぞれ 4 つのゼロを持つ 4 つの独立したリストを作成し、期待される動作が確実に達成されるようにします。

以上が入れ子になったリスト要素を変更すると、Python のすべてのサブリストに影響するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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