Bal*_*gan 18 python python-2.7
当我运行以下代码时,我分别得到3和36作为答案.
x ="abd"
print len(x)
print sys.getsizeof(x)
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下它们之间有什么区别吗?
Mar*_*ers 50
他们是不一样的东西可言.
len()查询容器中包含的项目数.对于字符数,即字符数:
返回对象的长度(项目数).参数可以是序列(字符串,元组或列表)或映射(字典).
sys.getsizeof()另一方面返回对象的内存大小:
以字节为单位返回对象的大小.对象可以是任何类型的对象.所有内置对象都将返回正确的结果,但这不一定适用于第三方扩展,因为它是特定于实现的.
Python字符串对象不是简单的字符序列,每个字符1个字节.
具体来说,该sys.getsizeof()函数包括垃圾收集器开销,如果有的话:
getsizeof()__sizeof__如果对象由垃圾收集器管理,则调用该对象的方法并添加额外的垃圾收集器开销.
不需要跟踪字符串对象(它们不能创建循环引用),但字符串对象确实需要的内存多于每个字符的字节数.在Python 2中,__sizeof__方法返回(在C代码中):
Py_ssize_t res;
res = PyStringObject_SIZE + PyString_GET_SIZE(v) * Py_TYPE(v)->tp_itemsize;
return PyInt_FromSsize_t(res);
Run Code Online (Sandbox Code Playgroud)
其中PyStringObject_SIZE是该类型的C结构报头大小,PyString_GET_SIZE基本上是相同的len()并且Py_TYPE(v)->tp_itemsize是所述每字符大小.在Python 2.7中,对于字节字符串,每个字符的大小为1,但这会使PyStringObject_SIZE您感到困惑; 在我的Mac上,大小为37字节:
>>> sys.getsizeof('')
37
Run Code Online (Sandbox Code Playgroud)
对于unicode字符串,每个字符的大小最多为2或4(取决于编译选项).在Python 3.3及更高版本中,Unicode字符串每个字符占用1到4个字节,具体取决于字符串的内容.
| 归档时间: |
|
| 查看次数: |
24343 次 |
| 最近记录: |