|
|
1
4
当然,这是有原因的,但实际上,这对于任何实际目的都不重要。如果您有一个python系统,为了接近系统内存,您必须在内存中保留如此多的字符串,那么您应该通过(1)尝试在内存中延迟加载/创建字符串,或(2)使用面向字节的高效二进制结构来处理您的数据,例如麻木,或者巨蟒自己的
空字符串文本(py2的unicode文本)的更改可能导致您正在查看的版本之间的任何实现细节,即使编写C代码来直接与python字符串交互,这也不重要:即使是那些文本也应该只通过api接触字符串。 现在,为什么python 3中的字符串只增加了“1”字节,而python 2中的字符串增加了4字节,具体原因是 PEP 393 . 在python 3.3之前,python中的任何(unicode)字符串都将为每个字符使用固定的2字节或固定的4字节内存——而使用本机代码的python解释器和python模块必须编译为仅使用其中一种。也就是说,即使版本匹配,由于在构建时获取的字符串宽度optoin,您最终也可能拥有不兼容的python二进制文件——构建被称为“窄构建”和“宽构建”。使用上面提到的PEP391,python字符串的字符大小取决于它包含的最宽的unicode码位的大小。包含前256个代码点中包含的点的字符串(相当于拉丁-1字符集)每个字符仅使用1个字节。 |
|
|
2
3
在内部,python 3现在以四种不同的编码方式存储字符串,并为每个字符串选择不同的编码。这些编码是ASCII、Latin-1、UCS-2和UTF-32。每个元素都能够表示不同的Unicode字符子集,并且具有索引处元素 我 也是索引处的Unicode代码点 我 .
在本例中,您可以看到添加了一个附加字符
这个系统是在
PEP-0393
并在python 3.3中实现。早期版本的python使用较旧的
|