可以预料,[]的大小小于[[]]的大小.在我的机器上,我得到以下尺寸:
>>> sys.getsizeof([])36>>> sys.getsizeof([[]])40
现在,无论我拥有多少嵌套空列表,我总是得到相同的大小:
>>> sys.getsizeof([[[]]])40>>> sys.getsizeof([[[[]]]])40
嵌套空列表的大小似乎有上边界的原因是什么?
解决方法 大小只是指最外面的对象而不是嵌套的对象.从getsizeof的角度来看,对象大小只是对象的大小加上对象中包含的指针的大小而不是指向的对象.您可以从以下内容中看到:>>> import sys>>> sys.getsizeof([])64>>> sys.getsizeof([[]])72>>> sys.getsizeof([[[]]])72>>> sys.getsizeof([[],[]])80>>> sys.getsizeof([[[]],[[]]])80
如果要获得总内存占用量,则需要以递归方式查找对象的大小或使用其他内存分析.
此外,如果您正在编写自己的对象并希望getsizeof正确返回大小,则可以实现自己的__sizeof__方法.例如:
import sysclass myList: def __init__(self,iterable): self.data = List(iterable) def __sizeof__(self): return object.__sizeof__(self) + \ sum(sys.getsizeof(v) for v in self.__dict__.values()) + \ sum(sys.getsizeof(item) for item in self.data)original_data = [[1,2,3],[1,3]]print(sys.getsizeof(original_data))foo = myList(original_data)print(sys.getsizeof(foo))
结果:
~/code_snippets$python3 sizeof_List.py 80336总结
以上是内存溢出为你收集整理的Python – 嵌套空列表的内存大小全部内容,希望文章能够帮你解决Python – 嵌套空列表的内存大小所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)