ホームページ  >  記事  >  バックエンド開発  >  Python のネストされたリストが同じ基礎データを共有するのはなぜですか?

Python のネストされたリストが同じ基礎データを共有するのはなぜですか?

DDD
DDDオリジナル
2024-10-31 07:46:02227ブラウズ

Why Do Nested Lists in Python Share the Same Underlying Data?

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

Python では、リストのリストを使用してネストされたリストを作成できます。ただし、これらのリスト内の値を変更する場合、Python の参照処理が原因で一般的な落とし穴が発生します。

次のコードを考えてみましょう:

<code class="python">some_list = 4 * [(4 * [0])]
for i in range(3):
    for j in range(3):
        some_list[i + 1][j + 1] = 1
for i in range(4):
    print(some_list[i])</code>

意図した出力は次のとおりです:

[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 * [(4 * [0 ])]。ここで、[(4 * [0])] 式は 4 つの要素を含む単一のリストを作成します。各要素は 4 つのゼロを含むリストです。ただし、後続の乗算 4 * では、4 つの異なるリストではなく、同じリストへの 4 つの参照が作成されます。

その結果、some_list の 1 つの要素内で値が変更されると、他の要素にも影響します。すべてが同じ基礎となるリストを指します。この動作は、Python では参照渡しとして知られています。

解決策

この問題を解決し、some_list 内に独立したリストを作成するには、ループを使用して各サブリストを個別に作成できます。

<code class="python">some_list = [(4 * [0]) for _ in range(4)]</code>

このコードは、それぞれ 4 つのゼロを持つ 4 つの異なるリストを作成します。 1 つのサブリスト内の値を変更しても、他のサブリストには影響しなくなりました。

以上がPython のネストされたリストが同じ基礎データを共有するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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