]>
<< 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
http://www.panopticon.jp/mt/mt-tb.cgi/57
コメントする