Python 多个指定后创建了多少个对象?

Python 多个指定后创建了多少个对象?,python,Python,这是用Python编写的 a = 1 a = 10 2份a的作业。是否创建了两个对象? “10”之后的“1”分配给a会发生什么情况?当您声明a=1python创建一个变量a指向内存中存储1的位置时,同样当您声明a=10时,它会创建另一个指向内存中新位置的对象。它不会覆盖旧的,并且仍然保留它。 作为示例 >>> import ctypes >>> a = 1 >>> aid = id(a) >>> aid 9062624 &

这是用Python编写的

a = 1
a = 10
2份a的作业。是否创建了两个对象?
“10”之后的“1”分配给a会发生什么情况?

当您声明
a=1
python创建一个变量
a
指向内存中存储
1
的位置时,同样当您声明
a=10
时,它会创建另一个指向内存中新位置的对象。它不会覆盖旧的,并且仍然保留它。 作为
示例

>>> import ctypes
>>> a = 1
>>> aid = id(a)
>>> aid
9062624
>>> a = 10
>>> aid2 = id(a)
>>> aid2
9062912
>>> ctypes.cast(aid, ctypes.py_object).value
1
>>> ctypes.cast(aid2, ctypes.py_object).value
10

它显示它创建了一个新对象并指向该对象,而旧对象保留下来。

该变量用于保存程序可以使用的某些值。当任何变量持有某个值且用户将从新值更改该值时,该变量将持有新值,旧值将擦除或更改为新值

因此,在这里,当计算第二个赋值a=2时,第一个赋值a=1被擦除或丢失。因此,“a”存储10和1被丢弃


由于两个值都指向同一个对象a,因此只有一个对象。

请为您定义什么是对象。IMHO,
1
是一个整数值。特别是阅读Python文档。另外,下载并学习开源软件,阅读相关书籍,再见。欢迎来到SO!您指的是语言中的Python对象还是解释器中的CPython对象?如果你指的是前者,是的,一切都是一个物体。如果你指的是CPython解释器,这是一个实现细节,但是是的,它会达到我想象的高度。Python如此之慢的一个主要原因是,所有事情,甚至仅仅是生成一个数字,都是一个堆分配,而在C语言中,您有大量的堆栈访问、局部性、打包和原语。。。。(因此NumPy…)好的,谢谢你。。。只是为了再次检查是否总共创建了3个python对象?请检查--CPython批处理分配整数以避免开销,但仍然需要堆访问时间。因此。。。创建了2个对象?这更像是
列表
定义新值时,变量指向新值,而最后一个对象仍然是
剩余的
(表示您仍然有指向内存中该位置的指针)