这个问题更多的是出于好奇。
我一直在阅读Python中int对象的实现细节(1 http://www.laurentluce.com/posts/python-integer-objects-implementation/ and 2 http://svn.python.org/projects/python/trunk/Objects/intobject.c),据我所知,Pythonint https://docs.python.org/2/c-api/int.html基本上是一个指向结构体的 C 指针,对吗?
所以问题基本上是,Python 中会发生什么内部所以等于二int
python中的s在等于复杂类型时并不指向同一个实例,例如list
, does:
>>> a=5
>>> b=a
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 40802136, id b: 40802136
>>> b+=1
>>> print "a: %s, b: %s" % (a, b)
a: 5, b: 6
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 40802136, id b: 40802112
>>> a=[5]
>>> b=a
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 45930832, id b: 45930832
>>> b.append(1)
>>> print "a: %s, b: %s" % (a, b)
a: [5, 1], b: [5, 1]
>>> print "id a: %s, id b: %s" % (id(a), id(b))
id a: 45930832, id b: 45930832
我的猜测是,通过看到id
上面实例的原因是修改整数会创建一个新实例并将新的内存地址重新分配给变量。我的怀疑正确吗?如果是这样,有谁知道让 int 表现得像这样的“历史”决定?是不是这样程序员就不会发疯了int
变量被分配给其他变量? (顺便说一句,我对此完全同意:-D )
正如我所说,这主要是出于好奇。先感谢您!