gpt4 book ai didi

引用相同位置的python类实例

转载 作者:行者123 更新时间:2023-11-28 22:00:56 24 4
gpt4 key购买 nike

我有一个名为 Door 的类和一个名为 Window 的类。它是名为 Furniture 的类的子类。我的程序读取 excel 文件,循环遍历 2 次,第一次读/写关于门的所有内容,第二次关于 window 。简化后,我有以下代码:

for gathering_inf in ('door', 'window'):
for row in file:
if gathering_inf == 'door' and currently reading door line:
furniture = Door(width, height, description)
if gatherig_inf == 'window' and currently reading window line:
furniture = Window(width, height, description)

# Now do something with the furniture object ..

奇怪的是,如果我例如(如上所示)打印对象 furniture,我会得到它们的位置,并且一些对象在内存中的位置是相同的,甚至尽管它们是两个不同的实例宽度不同的属性。例如:

<__main__.Door object at 0x03BFE810>
<__main__.Door object at 0x03BFE890>
<__main__.Door object at 0x03BFE810>
<__main__.Door object at 0x03BFE890>
<__main__.Door object at 0x03BFE8B0>
<__main__.Door object at 0x03BFE8D0>
<__main__.Door object at 0x03BFE8B0>
<__main__.Window object at 0x03BFE8D0>
<__main__.Window object at 0x03BFE8B0>
<__main__.Window object at 0x03BFE890>
<__main__.Window object at 0x03BFE8B0>
<__main__.Window object at 0x03BFE890>
<__main__.Window object at 0x03BFE8B0>
<__main__.Window object at 0x03BFE890>
<__main__.Window object at 0x03BFE8B0>
<__main__.Window object at 0x03BFE890>

有人可以向我解释为什么 python 会这样吗?

最佳答案

那是因为引用计数垃圾收集器。一旦将新对象分配给 furniture,GC 就会删除该对象,因此它的内存位置可以被新对象重新使用。


这是一个展示这种行为的小演示。请注意,由于 Python REPL 的工作方式(它在 _ 中保留对最后结果的引用),地址将交替出现。

>>> foo = object(); foo
<object object at 0x7fd74cd390a0>
>>> foo = object(); foo
<object object at 0x7fd74cd390b0>
>>> foo = object(); foo
<object object at 0x7fd74cd390a0>
>>> foo = object(); foo
<object object at 0x7fd74cd390b0>
>>> foo = object(); foo
<object object at 0x7fd74cd390a0>

关于引用相同位置的python类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14011440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com