gpt4 book ai didi

python - python中的len()和sys.getsizeof()方法有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 21:15:09 29 4
gpt4 key购买 nike

当我运行以下代码时,我分别得到 3 和 36 作为答案。

x ="abd"
print len(x)
print sys.getsizeof(x)

谁能给我解释一下它们之间有什么区别?

最佳答案

它们根本不是一回事

len()查询容器中包含的项目数。对于字符数的字符串:

Return the length (the number of items) of an object. The argument may be a sequence (string, tuple or list) or a mapping (dictionary).

sys.getsizeof()另一方面返回对象的内存大小:

Return the size of an object in bytes. The object can be any type of object. All built-in objects will return correct results, but this does not have to hold true for third-party extensions as it is implementation specific.

Python 字符串对象不是简单的字符序列,每个字符 1 个字节。

具体来说,sys.getsizeof() 函数包括垃圾收集器开销(如果有):

getsizeof() calls the object’s __sizeof__ method and adds an additional garbage collector overhead if the object is managed by the garbage collector.

不需要跟踪字符串对象(它们不能创建循环引用),但字符串对象确实需要更多的内存,而不仅仅是每个字符的字节数。在 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);

其中 PyStringObject_SIZE 是该类型的 C 结构头大小,PyString_GET_SIZE 基本上与 len()Py_TYPE 相同(v)->tp_itemsize 是每个字符的大小。在 Python 2.7 中,对于字节字符串,每个字符的大小为 1,但让您感到困惑的是 PyStringObject_SIZE;在我的 Mac 上,大小为 37 字节:

>>> sys.getsizeof('')
37

对于 unicode 字符串,每个字符的大小最多为 2 或 4(取决于编译选项)。在 Python 3.3 和更高版本上,Unicode 字符串每个字符占用 1 到 4 个字节,具体取决于字符串的内容

关于python - python中的len()和sys.getsizeof()方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17574076/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com