用dict理解Python内存管理

时间:2014-08-18 14:51:50

标签: python memory dictionary

当我使用dict编写一些Python代码时,我发现了代码的以下行为:

In [1]: def foo(bar_dict):
   ...:     print id(bar_dict)
   ...:     bar_dict['new'] = 1
   ...:     return bar_dict
   ...: 

In [2]: old_dict = {'old':0}

In [3]: id(old_dict)
Out[3]: 4338137920

In [4]: new_dict = foo(old_dict)
4338137920

In [5]: new_dict
Out[5]: {'new': 1, 'old': 0}

In [6]: id(new_dict)
Out[6]: 4338137920

In [7]: old_dict
Out[7]: {'new': 1, 'old': 0}

In [8]: id(old_dict)
Out[8]: 4338137920

old_dict函数中的new_dictbar_dictfoo都指向内存地址。内存中只存储了一个实际dict对象,即使我在函数内传递dict

我想了解更多有关Python这种内存管理机制的细节,有谁可以给​​我一些好的参考资料来解释一下这个问题?另外,当我们在Python中使用listsetstr时,是否有类似行为?

1 个答案:

答案 0 :(得分:2)

Python名称只是存储在堆上的对象的引用。将对象传递给函数调用只是传入这些引用,将参数名称绑定到同一个对象。

您创建了一个字典对象,并将old_dict绑定到该对象。然后,您将该名称传递给foo()函数,将本地名称bar_dict绑定到同一对象。然后在函数中操作该对象,并返回它。您在new_dict中存储了对返回对象的引用,导致两个全局名称引用同一对象。