首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中字符串大小是如何计算的?

在python中字符串大小是如何计算的?
EN

Stack Overflow用户
提问于 2020-04-05 21:24:32
回答 2查看 54关注 0票数 0

在python中字符串大小是如何计算的?我尝试了下面的代码:

代码语言:javascript
运行
复制
s = "test"
s.__sizeof__()
53

bytes(s, "utf-8").__sizeof__()
37

bytes(s, "utf-16").__sizeof__()
43

bytes(s, "utf-32").__sizeof__()
53

python如何计算字符串的大小?即使我考虑utf-8编码,任何字符都可以取1个字节到4个字节之间的任何位置。即使我考虑的最大长度是每个字符4个字节,4个字符的字符串应该占用大约16个字节,但是__sizeof__函数根据所选的编码显示从37个字节到53个字节的字节。

EN

回答 2

Stack Overflow用户

发布于 2020-04-05 21:36:57

__sizeof__计算底层的大小,这些对象比组成字符串的文字字节更复杂。

一个空的bytes对象有33个字节:

代码语言:javascript
运行
复制
>>> b''.__sizeof__()
33

UTF-8中的"test"恰好是4 bytes wide,因此您会得到:

代码语言:javascript
运行
复制
bytes(s, "utf-8").__sizeof__()
37 == b''.__sizeof__() + 4

其他编码似乎分别编码超过2个字节和4个字节的字符,因此您得到的大小大于33 + 2 * 4 = 4133 + 4 * 4 = 49

票数 0
EN

Stack Overflow用户

发布于 2020-04-05 21:46:08

如果您只打印以下命令,您将看到__sizeof__将为您提供以下每个结果的大小结果:

代码语言:javascript
运行
复制
>>> s='test'
>>> bytes(s,'utf-8').__sizeof__()
37
>>> bytes(s,'utf-8')
b'test'
>>> bytes(s,'utf-16')
b'\xff\xfet\x00e\x00s\x00t\x00'
>>> bytes(s,'utf-32')
b'\xff\xfe\x00\x00t\x00\x00\x00e\x00\x00\x00s\x00\x00\x00t\x00\x00\x00'

您编写代码的方式__sizeof__将为您提供每一行的大小:

  • b'test'
  • b'\xff\xfet\x00e\x00s\x00t\x00'
  • b'\xff\xfe\x00\x00t\x00\x00\x00e\x00\x00\x00s\x00\x00\x00t\x00\x00\x00'

而不是转换后的编码字符串大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61043318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档