Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python getsizeof为看似不同的列表返回相同的值_Python_Memory - Fatal编程技术网

Python getsizeof为看似不同的列表返回相同的值

Python getsizeof为看似不同的列表返回相同的值,python,memory,Python,Memory,我有以下二维位图: num = 521 arr = [i == '1' for i in bin(num)[2:].zfill(n*n)] board = [arr[n*i:n*i+n] for i in xrange(n)] 出于好奇,我想检查一下它需要多少空间,如果它是整数而不是布尔数。所以我用sys.getsizeof(board)检查了当前的大小,得到了104 之后我修改了 arr=[int(i)for i in bin(num)[2:].zfill(n*n)],但仍然得到104 然后

我有以下二维位图:

num = 521
arr = [i == '1' for i in bin(num)[2:].zfill(n*n)]
board = [arr[n*i:n*i+n] for i in xrange(n)]
出于好奇,我想检查一下它需要多少空间,如果它是整数而不是布尔数。所以我用
sys.getsizeof(board)
检查了当前的大小,得到了104

之后我修改了

arr=[int(i)for i in bin(num)[2:].zfill(n*n)]
,但仍然得到104

然后,我决定看看仅使用字符串就能得到多少:

arr=[i代表bin中的i(num)[2:].zfill(n*n)]
,仍然显示104

这看起来很奇怪,因为我希望字符串列表比布尔值浪费更多的内存

显然,我遗漏了一些关于getsizeof如何计算大小的信息。谁能解释我为什么会得到这样的结果

p.S.感谢zehnpard的回答,我发现我可以使用
sum(sys.getsizeof(I)表示线路板中的线路板,表示线路板中的线路板)
来大致计算内存(很可能它不会计算列表,这对我来说并不重要)。现在我看到字符串和int/bool在数字上的区别(int和boolean没有区别)

因为Python 3.4非常明确:

只考虑直接归因于对象的内存消耗,而不考虑它所指对象的内存消耗

鉴于Python列表实际上是指向其他Python对象的指针数组,Python列表包含的元素数量将影响其在内存中的大小(更多指针),但包含的对象类型不会影响它(内存方面,它们不包含在列表中,只是指向)

要获得容器中所有项目的大小,您需要一个递归解决方案,文档提供了一个指向activestate配方的链接。

考虑到这个方法是针对Python2.x的,我确信这个行为一直是标准的,并且从3.4版开始在文档中被明确提到