Python基本对象学习笔记
将python基本对象的要点记录如下
python 整数对象1.python中的整数使用c语言中的long类型存储2.python int进行加易做图检查结果是否溢出,如果溢出则自动转换为pyLongObject对象3.python中的文档无缝集成在语言实现中
1 a = 11
2 print a.__doc__
4.小整数对象完全缓存在内存中,其他整数对象轮流使用一块内存空间5.小整数对象在python初始化中调用的_PyInt_Init中创建,然后就一直存在着, 直到python虚拟机退出
python String对象1.pyStringObject在创建之后,内部维护的字符串不能再改变2.intern机制是否只在字符数组长度0或者1的时候使用? 书中提供的代码太过于精简了,没讲清楚,但是看后面的演示结果,应该是所有的字符串都实现了intern机制3.字符串连接操作严重影响python程序执行效率,使用join只需分配一次内存,能够大大提高效率.用法举例
"".join(['s1','s2','s3'])
Python Dict对象1.Python中的dict采用hashtable而不是R-B Tree。2.采用开放定址法解决冲突。3.为保证冲突探测链的连续性,采用伪删除技术,active对象删除则设置为dummy态4.为减少冲突,转载率大于2/3时则改变table的大小,每次增大4倍,如果table中的active态的元素个数大于50000时(巨型表), 则放慢增长速度,每次增长2倍。可以看出Python中dict的查找效率较高,而对于内存的使用是省了又省,还考虑了巨型表增长减少倍数。Python List对象1.PyListObject类似STL中的Vector。2.Python对内存的使用十分节俭,如果list改变的新尺寸不到分配内存的1/2,则收缩内存.3.在Pylist中建插入元素需要逐个移动后面的元素,类似C中的数组,因此需要尽量避免对中间元素的插入和删除操作。4.STL和PyListObject自动扩容算法对比:个人觉得list改名为array比较恰当一些,嘿嘿//sgi STL:len = (old_size != 0 )?2*oldsize:1//(不够用则扩充两倍,如果开始为空则设置为1)//Python:new_allocated=(newsize>>3)+(newsize<9?3:6)//(???)5.对于增长倍数的选择,这里有讨论http://en.w3support.net/index.php?db=so&id=1100311p70书中笔误:"allcated/2"应改为"allocated/2"
补充:Web开发 , Python ,