这个问题更像是一种好奇心。你知道吗
我一直在阅读Python(1和2)中int对象实现的细节,据我所知,Pythonint基本上是指向结构的C指针,对吧?你知道吗
所以问题基本上是,在Python内部发生了什么,所以在Python中均衡两个int
并不指向同一个实例,而均衡复杂类型(如list
)会:
>>> 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
是因为修改一个整数会创建一个新实例,并将新的内存地址重新分配给变量。我的怀疑正确吗?如果是这样的话,有人知道ints这样做的“历史”决定吗?当int
变量被分配给其他变量时,程序员不会发疯吗?(我完全同意,顺便说一句:-D)
正如我所说,这主要是一种好奇心。提前谢谢!你知道吗
您没有修改原始整数,而是创建一个新整数并将变量赋给它,因此
id
是不同的。你知道吗与相同
list
等价物不是使用append
,而是使用+
:对于
int
s,append
不是等价的,因为int
s不能修改,而list
s可以修改。你知道吗唯一可能令人困惑的是
原因是
+=
运算符(不幸的是,IMO)修改了原始列表,因此b += [1]
和b = b + [1]
不是等价的语句。(见Why does += behave unexpectedly on lists?)相关问题 更多 >
编程相关推荐