微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于Linux的Python垃圾收集

我有点困惑Python如何分配内存和垃圾收集,以及如何是特定于平台的。 例如,当我们比较以下两个代码片段时:

代码片段A:

>>> id('x' * 10000000) == id('x' * 10000000) True

摘录B:

>>> x = "x"*10000000 >>> y = "x"*10000000 >>> id(x) == id(y) False

代码片段A返回true,因为当Python分配内存时,它会将它分配到第一个testing的相同位置,并在第二个testing的不同位置分配,这就是为什么它们的内存位置不同。

python模块问题

当组件设备可能包含ext2文件系统时,脚本mdadm已经

Joomla扩展,文件权限

sed错误“sed:unmatched'/'”

使用grep就好像在awk里面条件一样

但显然系统性能或平台会影响到这一点,因为当我尝试更大规模时:

for i in xrange(1,1000000000): if id('x' * i) != id('x' * i): print i break

一个Mac上的朋友试了一下,直到最后。 当我在一堆Linux虚拟机上运行它时,它总是会在不同的虚拟机上返回(但在不同的时间)。 这是因为在Python的垃圾收集的时间安排? 是因为我的Linux虚拟机的处理速度比Mac还less,还是Linux的Python实现垃圾收集的方式不一样?

string的最大大小可以使用%s打印?

实际上在文件描述符中存储了多less信息?

awk – 显示文件

令人费解的asynchronous行为

Beaglebone inittab问题

cpython使用两种内存管理策略:

引用计数

标记和扫描垃圾收集

分配通常通过平台malloc / free函数来完成,并且继承了underlaying运行时的性能特征。 如果内存被重用是由操作系统决定的。 (有一些对象,由Python vm合并)

但是,您的示例不会触发“真正的”GC算法(仅用于收集周期)。 一旦最后一个引用被删除,你的长字符串就会被释放。

垃圾收集器只是使用任何方便的空间。 有很多不同的垃圾收集策略,事情也受到参数,不同平台,内存使用情况,月相等的影响。试图猜测解释器如何分配特定对象只是浪费时间。

这是因为python缓存小整数和字符串:

大字符串 :存储在未缓存的变量中:

In [32]: x = "x"*10000000 In [33]: y = "x"*10000000 In [34]: x is y Out[34]: False

大字符串 :不存储在变量中,看起来像缓存:

In [35]: id('x' * 10000000) == id('x' * 10000000) Out[35]: True

小字符串 :缓存

In [36]: x="abcd" In [37]: y="abcd" In [38]: x is y Out[38]: True

小整数:缓存

In [39]: x=3 In [40]: y=3 In [41]: x is y Out[41]: True

大整数:

存储在变量中:没有被缓存

In [49]: x=12345678 In [50]: y=12345678 In [51]: x is y Out[51]: False

不存储:缓存

In [52]: id(12345678)==id(12345678) Out[52]: True

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐