python源码分析笔记(4)

1.字符缓冲池

Python也为PyStringObject中的一个字节的的字符对应的PyStringObject对象也设计了一个对象池,

static PyStringObject *characters[UCHAR_MAX+1]

其中的UCHAR_MAX是系统头文件定义的常量。

当我们创建一个PyStringObject对象时,无论是通过调用PyString_FromString还是通过调用PyString_FromStringAndSize,如果字符串实际是一个字符,则会进行如下操作,

2.PyStringObject效率相关问题

假如现在有两个字符串“Python”和“Ruby”,在java中可以通过使用 "+“操作符将两个字符串连接在一起,当然Python也提供了利用
“+”操作符链接字符串的功能,然而通过这样的方法效率低下,根源在于PyStringObject对象是一个不可变对象,这意味着当字符串进行连接时,会产生一个新的PyStringObject,如果要连接N个对象,就必须进行N-1次内存申请及搬运操作。

官方推荐的方法是利用PyStringObject对象的join操作来对存储在list或tuple的一组PyStringObject对象进行连接操作。这种方法只需分配一次内存。

关于 join 和 ”+“操作符的源码就不贴出了,省略了比较多的内容,有兴趣的可以自己去翻阅python 源码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值