6

現在、バージョン3.2でPythonを学習しています。

2つのリスト変数がある場合、変数が同じリストを参照しているのか、同じ値を持つ2つの別々のリストを参照しているのかをどのように区別しますか。

例えば:

>>> foo = [1,2,3,4]
>>> bar = foo
>>> foo.append(5)
>>> foo
[1, 2, 3, 4, 5]
>>> bar
[1, 2, 3, 4, 5]
>>> foo == bar
True

上記では、「foo」と「bar」は明らかに同じリストを参照しています。(fooに「5」を追加し、その変更がバーにも反映されていることからもわかります)。

次に、同じ値を持つ「other」と呼ばれる3番目のリストを定義しましょう。

>>> other = [1,2,3,4,5]
>>> other == foo
True

ここでの比較演算子もTrueを返すことを考えると、これらは間違いなく同じリストのように見えます。しかし、「その他」を変更すると、どちらかの変数の変更が他方に影響を与えない別のリストであることがわかります。

>>> other.append(6)
>>> other == foo
False
>>> other
[1, 2, 3, 4, 5, 6]
>>> foo
[1, 2, 3, 4, 5]

2つの変数が互いにエイリアスであるのか、構造が同一であるのかを知ることは有用だと思います。しかし、私は言語の基本的な何かを誤解しているのではないかと思います。

4

1 に答える 1

11

is演算子を使用して、オブジェクトIDを判別できます。

>>> foo is bar
True
>>> foo is other
False

ドキュメントを引用するには:

演算子isis notオブジェクトIDのテスト:とが同じオブジェクトx is yである場合にのみtrueになります。逆真理値を生成します。xyx is not y

id()2つの変数が同じオブジェクト(リストなど)を参照しているかどうかを検出する別の方法は、関数の戻り値をチェックすることです。

>>> id(foo)
4432316608
>>> id(bar)
4432316608
>>> id(other)
4432420232
于 2012-12-29T10:58:09.727 に答える