gpt4 book ai didi

python - 没有指针的字典会发生什么

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:50 25 4
gpt4 key购买 nike

我对 dict() 有一个想法,我会不断更新它,就像这样:

def creating_new_dict():
MyDict = dict()
#... rest of code - get data to MyDict
return MyDict

def main():
while(1):
MyDict = creating_new_dict()
time.sleep(20)

我知道 MyDict 是指向 dict 的指针,所以我的问题是 MyDict 中的旧数据会怎样?它是被删除了还是我应该确保它已经消失了?

最佳答案

回来回答你的问题,因为没有其他人做过:

I know that MyDict is a pointer to the dict

呃。 MyDict 是对您的 dict 对象的引用,而不是指针。稍微题外话如下:


您不能在函数内改变不可变类型,因为您处理的是引用,而不是指针。见:

def adder(x):
x = x + 1

a = 0
adder(a)
a
Out[4]: 0

我不会在兔子洞里走得太远,但就是这样:我无法将任何东西放入 adder 的主体中,这会导致 a改变。因为变量是引用,而不是指针。


好的,我们回来了。

so My question is what happens to the old data in MyDict?

嗯,它仍然存在,在某个对象的某个地方,但你炸毁了对它的引用。引用不再存在,它已经不存在了。事实上,对旧 dict 的现存引用恰好为零,这在下一段中很重要!

Is it deleted

本身并没有被删除,但您基本上可以认为它已被删除。它没有剩余的引用,这意味着它符合垃圾收集的条件。 Python 的 gc 在被触发时会出现并清除所有没有剩余引用的对象,其中包括所有孤立的 dict

但正如我在评论中所说:gc 不会在现在触发,但会在(可能非常接近的) future 某个时间触发。多快发生取决于.. 东西,包括你运行的是什么风格的 python。 cPython(您可能正在运行的那个)通常会立即 gc 对象,但是这不能保证并且不应依赖 - 它留给实现。您可以指望的是 - gc 会出现并最终清理(好吧,只要您没有禁用它)

or should I make sure it's gone?

不不不。没有。不要做垃圾收集器的工作。仅当您有非常具体的性能原因时才应该这样做。

I still don't believe you, show me an example.

呃,你是这么说的吧?好的:

class DeleteMe:
def __del__(self): #called when the object is destroyed, i.e. gc'd
print(':(')

d = DeleteMe()
d = DeleteMe() # first one will be garbage collected, leading to sad face
:(

而且,正如我之前所说,您不应该指望 :( 立即发生,只是 gc 最终会发生。

关于python - 没有指针的字典会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19829740/

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