python 中字符串默认的是 Unicode 编码,数字字符、英文字符和中文字符在 Unicode 编码中不是都是 2 字节么?
为什么我用 getsizeof()函数来看字符串的内存大小,发现 1 个汉字字符是 2 字节没错,但 1 个数字字符却只有 1 字节?
我用 utf-8 编码检验了一下,没发现问题。1 个数字字符 1 字节,一个汉字 3 字节。
print('Unicode_123 =', sys.getsizeof('123'))
print('Unicode_12 =', sys.getsizeof('12'))
# Unicode_123-Unicode_12 可得字符串默认编码下 1 个数字字符所占内存
print('Unicode_一二三 =', sys.getsizeof('一二三'))
print('Unicode_一二 =', sys.getsizeof('一二'))
# Unicode_一二三-Unicode_一二可得字符串默认编码下 1 个汉字字符所占内存
print('Utf-8_123 =', sys.getsizeof('123'.encode('utf-8')))
print('Utf-8_12 =', sys.getsizeof('12'.encode('utf-8')))
# Utf-8_123-Utf-8_12 可得 utf-8 编码下 1 个数字字符所占内存
print('Utf-8_一二三 =', sys.getsizeof('一二三'.encode('utf-8')))
print('Utf-8_一二 =', sys.getsizeof('一二'.encode('utf-8')))
# Utf-8_一二三-Utf-8_一二可得 utf-8 编码下 1 个汉字字符所占内存
显示结果如下:
Unicode_123 = 52
Unicode_12 = 51
Unicode_一二三 = 80
Unicode_一二 = 78
Utf-8_123 = 36
Utf-8_12 = 35
Utf-8_一二三 = 42
Utf-8_一二 = 39
但如果字符串是数字或英文字母混合汉字时,新增 1 个数字字符是增加 2 字节
print('Unicode_一 =', sys.getsizeof('一'))
print('Unicode_1 一 =', sys.getsizeof('1 一'))
print('Unicode_a 一 =', sys.getsizeof('a 一'))
print('Unicode_一二 =', sys.getsizeof('一二'))
显示结果如下:
Unicode_一 = 76
Unicode_1 一 = 78
Unicode_a 一 = 78
Unicode_一二 = 78
这种情况是为什么呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.