我有点困惑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信息?
令人费解的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] 举报,一经查实,本站将立刻删除。