Python引用一个新实例交替

Python引用一个新实例交替,第1张

概述这些天我一直在玩 Python,我意识到 Python如何将id(地址)分配给新实例(int和list). 例如,如果我使用数字(或两个不同的数字)保持调用id函数,则返回相同的结果.例如 >>> id(12345)4298287048>>> id(12345)4298287048>>> id(12345)4298287048>>> id(12342) #different numbe 这些天我一直在玩 Python,我意识到 Python如何将ID(地址)分配给新实例(int和List).

例如,如果我使用数字(或两个不同的数字)保持调用ID函数,则返回相同的结果.例如

>>> ID(12345)4298287048>>> ID(12345)4298287048>>> ID(12345)4298287048>>> ID(12342) #different number here,yet still same ID4298287048

此外,当我先声明变量然后用它调用ID()时,结果就像这样交替.

>>> x = []; ID(x)4301901696>>> x = []; ID(x)4301729448>>> x = []; ID(x)4301901696>>> x = []; ID(x)4301729448

有人可以解释一下这背后的Python工作吗?还有,有一本书或一个网站,我可以阅读有关Python的这一部分(分配内存地址,幕后工作等),因为我从python documentation找不到什么

解决方法 您正在创建一个没有任何其他引用的新对象,并且在ID()完成后再次销毁对象时,Python会重新使用内存位置.在cpython中,ID()的结果恰好是对象的内存位置.从 id() function documentation:

cpython implementation detail: This is the address of the object in memory.

行ID(12345)创建一个新的int()实例;因为它被绑定为ID()的参数,所以它有1个引用. ID()确定内存位置,并返回该结果.在返回时,参数被清理,int()实例的引用计数降为0,Python将其清理干净.内存被释放.

下一行创建一个新的int()实例.在同一位置有可用内存,因此可以重复使用.

相反,当您首先绑定新对象时没有名称时,您创建了对该对象的额外引用,并且它未被清除.内存未释放,新对象必须使用新的内存地址.

这部分也是从ID()文档中记录的:

This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapPing lifetimes may have the same ID() value.

强调我的.

重新绑定时(x = [],当x已经设置时)Python首先创建一个新对象,然后重新绑定x以指向该新对象.在创建新列表后,这将取消绑定旧列表.这意味着在创建新列表对象时仍会占用旧的内存位置.

要将其映射到特定步骤:

>您创建一个ID()== 4301901696的对象.
> 4301901696必然是x – > 4301901696的引用计数为1.
>您创建一个ID()== 4301729448的对象.
> 4301901696未受x限制. 4301901696的引用计数降为0并从内存中清除.
> 4301729448绑定到x. 4301729448的引用计数为1.
>您创建一个新对象,4301901696为空,因此新对象获取ID()== 4301901696.
> 4301729448未被x绑定. 4301729448的引用计数降至0并从内存中清除.
> 4301901696绑定到x. 4301901696的引用计数为1.
>等

这也是文档的一部分,assignment statement documenation告诉您在哪个订单分配中:

An assignment statement evaluates the Expression List […] and assigns the single resulting object to each of the target Lists,from left to right.

表达式列表是=符号右侧的所有内容.

总结

以上是内存溢出为你收集整理的Python引用一个新实例交替全部内容,希望文章能够帮你解决Python引用一个新实例交替所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存