python - 如何理解 Python 中列表结构的记忆?
问题描述
我想知道python take的记忆。
这是代码:</p>
import sys
list1 = [1]
list2 = [1,2]
list3 = [1,2,3]
list4 = [1,2,3,4]
list5 = [1,2,3,4,5]
list6 = ['1',2,3,4,5,6]
list7 = [1,2,'3','4',5,6,7]
list8 = [1,2,3,'sdsd',5,6,7,8]
list9 = [1,2,3,4,5,6,7,8,9]
print('list1 size is :', sys.getsizeof(list1))
print('list2 size is :', sys.getsizeof(list2))
print('list3 size is :', sys.getsizeof(list3))
print('list4 size is :', sys.getsizeof(list4))
print('list5 size is :', sys.getsizeof(list5))
print('list6 size is :', sys.getsizeof(list6))
print('list7 size is :', sys.getsizeof(list7))
print('list8 size is :', sys.getsizeof(list8))
print('list9 size is :', sys.getsizeof(list9))
这是结果:
list1 size is : 64
list2 size is : 72
list3 size is : 120
list4 size is : 120
list5 size is : 120
list6 size is : 152
list7 size is : 120
list8 size is : 120
list9 size is : 152
我困惑的问题是:
为什么
list6
大于list7
等于list9
?为什么是
list3-
list5equal to
list7-
list8` ?
谢谢大家。
解决方案
首先getsizeof
是以字节为单位返回大小。
所以让我们把它分解成更小的步骤。
int、string + 空列表的代码示例:
import sys
list1 = [1]
list2 = ['a']
list3 = []
print('list 1:', sys.getsizeof(list1))
print('list 2:', sys.getsizeof(list2))
print('list 3:', sys.getsizeof(list3))
回复
list 1: 64
list 2: 64
list 3: 56
如您所见,空列表使用 56 个字节,而带有字符串或 int 的列表使用相同数量的 64 个字节。
每个列表区域(步骤)将至少保留 8 个字节。包含数据看这个例子。
import sys
list1 = [1]
list2 = [1,2]
list3 = [1,2,3]
list4 = [1134,2234,3334]
list5 = ['ab','t',3334]
print('list 1:', sys.getsizeof(list1))
print('list 2:', sys.getsizeof(list2))
print('list 3:', sys.getsizeof(list3))
print('list 4:', sys.getsizeof(list4))
print('list 5:', sys.getsizeof(list5))
清单 3-5 它使用了相同数量的空间,这里唯一的结果是它的列表项数量。
list 1: 64
list 2: 72
list 3: 80
list 4: 80
list 5: 80
所以为什么你看到字节是相等的,我认为你关闭了 Python 的工作方式,以及它的基本工作方式。
我无法解释它的更多信息,关于它的逻辑与否总是可以讨论的。
如果您将文本文档保存在计算机上,则相同,它会为文件保留一些空间,并且文件的实际字节大小与正常情况不同,我认为 python 会做一些类似的事情。
推荐阅读
- swift - xcode swift4如何更改viewdidload中的页面
- r - 如何将数据框转换为以列名作为名称的向量
- android - 如何在回收站视图中单击
- spring-boot - Spring Security 5.1.1 OAuth2 客户端连接到 spring-security-oauth2 Auth Server
- c++ - QToolbar的句柄是什么类型的组件?
- php - 队列未处理
- python - 文档字符串中的 python 注释
- traffic - 在 istio 中,如果 iptables 只重定向出站流量,会发生什么?
- android - Xamarin 不会内存不足
- c++ - 使用 LuaBridge 将 LuaJIT 绑定到 C++ 会导致“PANIC: unprotected error”