3

こんにちは、私はこのコードが何をするか知っています:

1.] 私の最初の問題

x = 4 
y = x

しかし、これはどうですか。この場合でも、なぜ同じアドレスなのですか?

x = 4
y = 4
id(x)
12345678
id(y)
12345678

2.] 私の第二の問題

x = 42 
y = x 
x = x + 1 
print x  # Prints 43
print y  # Prints 42


x = [1, 2, 3]
y = x
x[0] = 4
print x # Prints [4, 2, 3]
print y # Prints [4, 2, 3]

xしかし、リストの場合、 &の両方yがコマンドによって一緒に変更されたのはなぜですかx[0] = 4
このような動作で、リストと何が大きく違うのでしょうか?
彼らがこのように振る舞う理由は何ですか?
そして最も重要なことは、そのような行動の利点は何ですか?
リスト、変数、タプルがお互いのすべてのプロパティを持つことができないのはなぜですか?

4

2 に答える 2

8
  1. 小さな整数はCPythonにキャッシュされるため、ID は同じです。
  2. 整数は不変であるため、1 つを変更 (つまり、新しいオブジェクトに割り当て) しても、他の参照には影響しません。
  3. リストは変更可能であるため、変更可能なオブジェクトへの参照を変更 (インプレース変更) すると、他の参照にも影響します。
  4. 小さな文字列も同じ ID を持つことができます:

整数の例:

>>> x = 100
>>> y = x
>>> id(x),id(y)
(165193204, 165193204)
>>> x += 1
>>> id(x), id(y)    #`x` now points to a new object, `y` still points to the old object
(165193192, 165193204)
于 2013-08-30T06:21:03.083 に答える