Python中文
首页
教程
问答
标签
搜索
登录
注册
Python内存管理洞察id()
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>玩弄<code>id()</code>。从查看不相同对象中相同属性的地址开始。但我想那现在已经不重要了。具体到代码:</p> <pre><code>class T(object): pass class N(object): pass </code></pre> <p>第一次测试(在交互控制台中):</p> ^{pr2}$ <p>实际上,这并不奇怪。<code>n.__class__</code>与{<cd3>}不同,所以很明显它们不可能是同一个对象。此时<code>__class__</code>是否只是这些对象之间的</strong>区别?假设<strong>否</strong>,如:</p> <pre><code>>>> n1 = N() >>> n2 = N() >>> id(n1) == id(n2) False </code></pre> <p>或者Python只是创建单独的对象,即使它们在内容上完全相同,而不是首先将名称<code>n1</code>,<code>n2</code>分配给相同的对象(内存中),然后在修改<code>n1</code>或{<cd6>}时重新赋值?为什么?我知道这可能是一个惯例、优化、情绪、低级问题(别放过我),但我还是很好奇。在</p> <p>现在,与前面相同的类,<code>T()</code>&;<code>N()</code>——在shell中一个接一个地执行:</p> <pre><code>>>> id(N()) 4298619728 >>> id(N()) 4298619792 >>> id(N()) 4298619728 >>> id(N()) 4298619792 </code></pre> <p>为什么要耍杂耍?在</p> <p>但奇怪的部分来了。同样的类,shell:</p> <pre><code>>>> id(N()), id(T()) (4298619728, 4298619728) >>> id(N()), id(T()) (4298619728, 4298619728) >>> id(N()), id(T()) (4298619728, 4298619728) </code></pre> <p>不仅杂耍停止了,而且N()和T()似乎是同一个对象。由于它们不可能,我将其理解为<code>N()</code>返回的内容在<code>id()</code>调用之后,<strong>在整个语句结束之前被销毁。在</p> <p>我知道这可能是一个很难回答的问题。但我希望有人能告诉我,我在这里观察到的是什么,我的理解是否正确,分享一些关于口译员内部工作和记忆管理的黑暗魔法,或者指出一些关于这个问题的好资源?在</p> <p>谢谢你在这件事上的时间。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我可能错了,但我想你看到的是垃圾回收员在行动。对N()或T()的调用会创建一个不存储在任何地方的对象,然后由GC获取。然后,可以重用存储器地址。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何合并多个PDF文件?
2 回答
如何合并多个xarray数据变量及其坐标?
8 回答
如何合并多个列中具有重复值的行
9 回答
如何合并多个唯一id
7 回答
如何合并多个图纸并使用图纸名称的名称重命名列名?
6 回答
如何合并多个字典并添加同一个键的值?(Python)
5 回答
如何合并多个搜索结果文件(pkl)以将它们全部打印在一起?
6 回答
如何合并多个数据帧
6 回答
如何合并多个数据帧并使用Pandas为假人添加列?
9 回答
如何合并多个数据帧并按时间戳排序
9 回答
如何合并多个数据帧的列表并用另一个lis标记每列
6 回答
如何合并多个数据框中的列
1 回答
如何合并多个文件?
7 回答
如何合并多个查询集?
8 回答
如何合并多个绘图?
1 回答
如何合并多个词典
1 回答
如何合并多个输入数据集(数据帧)?
9 回答
如何合并多条记录中拆分的文本行
1 回答
如何合并多索引列datafram
3 回答
如何合并多级(即多索引)数据帧?
1 回答