C中的字符串是一个以'\0'结尾的字符数组
python中的字符串对象有内部的PyStringObject表示。
结构:
typedef struct
{
PyObject_VAR_HEAD;
long ob_shash;
int ob_sstate;
char ob_sval[1];
}PyStringObject;
其中ob_shash是字符串的哈希,ob_sval包含大小为ob_size的字符串,以'\0'终止,ob_sval初始大小为1字节
ob_sval[0] = 0。ob_size位于PyObject_VAR_HEAD中,这位于object.h,ob_sstate表示字符串对象是否在待查字典中
s1 = 'abc'会发生什么?
调用内部C函数PyString_FromString,以下是伪代码
argument:stirng object :'abc'
returns :Python string object with ob_sval = 'abc'
PyString_FromString(string):
size = length of string
allocate string object + size for 'abc'.ob_sval will be of size:size+1
copy string to ob_sval
return object
可以看出每次使用新字符串时ÿ