文章

随笔

16. 向 List 插入元素

List 最常用的几种操作有: 插入元素,比如 insert、append、extend; 弹出元素,比如 pop、delete; 切片 slice; 今天主要看一下 List 如何增加元素。最简单的增加 1 个元素,代 …

阅读全文
随笔

15. List 对象的创建

List 对象比 String 对象更简单,主要维护一个 Object 数组,所以 List 对象的创建也更简单。其代码如下: 过程并不复杂,除过一些错误处理代码,首先会尝试从 free list 中复用闲置的 List …

阅读全文
随笔

14. 初始 List Object

String 对象的实现比较复杂,主要是因为 unicode 编码的特殊性,虽然还有不少不清楚的细节,但是我不打算在此卡住,直接进入 Python 另一个基本类型 List。与 String、Int 类型不同,List …

阅读全文
随笔

13. String 的内存优化

String Object 采用了多种结构,以适应不同应用场景的内存使用效率,String Object 最要有以下几类: latin 1 字符串; UCS2 类型即 2 字节 16 位字符串; UCS4 类型即 4 字 …

阅读全文
随笔

12. String Object 的底层也可变!

一般我们认为 String Object 是不可变的,所以它才能作为 dict 的 key,即可 hash。实际上在底层,String Object 可以在一些特定的情况下发生 “修改”,比如在字符串拼接时,调整前面 …

阅读全文
随笔

11. 创建 Unicode 对象-2

上一节已经大体了解 Unicode 对象的两种创建方式,一种是 compact 模式,即 data 紧跟在类型结构之后,另一种 data 是一个独立的内存,通过指针与类型结构关联在一起。Python 对 String 的 …

阅读全文
随笔

10. 创建 Unicode 对象-1

由于 unicode 在 Python 中使用频率极高,Python 3 针对 unicode 提供了大量接口和优化,其中最基本的是 PyUnicode New 和 PyUnicode New 函数,分别提供了两种不同的 …

阅读全文
随笔

9. 了解 unicode 编码

Python 3 中的 String 对象实现了对 Unicode 的支持,在深入研究 String 的实现前,需要对 Unicode 有比较深入的了解。 最初的字符编码 ASCII 如果有 C 语言编程经验的朋友,一定 …

阅读全文
随笔

8. String Object 的结构

上一节我们大体认识了 int 对象,在 Python 3 中实际上是以 LongObject 实现的,在 LongObject 的类型定义中,我们根据其类型名称 “int” 确认了这一点。回顾 int 对象的结构: 与 …

阅读全文
随笔

7. Karatsuba 乘法的实现

Python 的长整数乘法使用了 Karatsuba 算法,昨天写的比较粗,今天仔细研究了以下它的实现,真是是妙啊。 多项式乘法 在一切开始之前,需要回顾多项式乘法公式: (a + b)(c + d) = ac + ad …

阅读全文