]> Panopticon :: Python :: オブジェクトの同一性

<< Pythonのgenerator(3) グラフ探索(2) | main | 豊田市美術館に行って来ました >>

オブジェクトの同一性

>>> a = [1,2]
>>> b = [1]
>>> b += [2]
>>> a
[1, 2]
>>> b
[1, 2]

>>> a == b
True
>>> a is b
False

==演算子は中身を、is演算子は参照を比べています。Javaだと==で参照の同一性、equalsで同値性だったはずなんで逆ですね。

>>> c = [1]
>>> d = c
>>> c is d
True
>>> c = c + [2]
>>> c
[1, 2]
>>> d
[1]

c = c + [2]とした場合、新しいオブジェクトが作られ、それにcが結合されます。cがもともと結合されていたオブジェクトは書き換えられません。

>>> e = [1]
>>> f = e
>>> e is f
True
>>> e += [2]
>>> e
[1, 2]
>>> e
[1, 2]

拡張代入の場合、cが結合されているオブジェクト自体が書き換えられます。

>>>  for i in xrange(10000000):
...     e += [i]
...
>>>  e is f
True
カテゴリ

Trackback URI

http://www.panopticon.jp/mt/mt-tb.cgi/57

Trackbacks(0)

コメントする