python string 对象

上一篇的整数对象是定长数据,即C中的long型整数。 但是python中还大量存在着不定长的数据类型。如字符串对象

和整数对象一样,字符串对象的组成如下:

PyStringObject定义如下:

Ob_size就是实际使用的内存大小,在注释中:ob_sval contains space for ‘ob_size+1‘ elements. 因为末尾需要额外包含一个0 byte来保证字符串的结束。 这个学过C语言的应该都不会陌生的。但是这只是一个字符数组,怎么能包含N个字符呢? 显然这只能是一个字符指针,指向一个字符串内存地址。这个字符串内存存储的就是python字符串对象的字符内容,显然额外包含一个‘0’。这个内存的实际大小就是由Ob_size+1来维护的。

PyString_Type的定义就不在贴代码了,格式基本上和整数对象一样。

创建PyStringObject对象

PyStringObject对象的创建不像整数对象最终都调用的类似一个函数PyInt_FromLong。那么字符串会像整数对象那样会有缓存池么?在PyString_FromString函数中,原作者加了注释/* share short strings */。当字符只有1个的时候,会放进characters中。这个缓存区的大小是UCHAR_MAX。很显然这是平台相关的宏定义。

从他的声明中,可以知道characters是一个static变量。按照C语言的做法,Python完成初始化后,characters应该被初始化为空的指针数组。Follow之前整数对象的打印操作。 我们打印characters最后5位以及其分别的引用数

写这个函数的时候,按照书上返回void,编译就会失败,必须返回int才可以

可以看到a的引用计数增加,的确是放在字符数组中共享使用

时间: 2024-10-25 12:59:42

python string 对象的相关文章

7.4.4 String对象问题

String是Java中使用频率第一的类,以前在CSDN论坛上,至少每个月都有相关的贴子,讨论==和equals(). 本节介绍这一部分的内容,也有一个重要更正. String文字在程序中被大量地使用.String文字作为引用,指向一个String对象.例如"baby"指向的一个String对象,该对象保存的数据主要有一个char[]引用和3个int值. 字符串拘留 为了有效地利用堆,加快字符串处理效率(以==比较替代equals(Object)比较),多种语言如Java.C#和Pyt

Python string interning原理

原文链接:The internals of Python string interning 由于本人能力有限,如有翻译出错的,望指明. 这篇文章是讲Python string interning是如何工作的,代码基于CPython2.7.7这个版本. 前一段时间,我向同事解释了python的buil-in函数 intern背后到底做了什么.我给他看了下面这个例子: >>> s1 = 'foo!' >>> s2 = 'foo!' >>> s1 is s2

python string.md

string 包含用于处理文本的常量和类.string模块始于Python的最早版本. 2.0版本中, 许多之前只在模块中实现的函数被转移为string对象的方法. 之后的版本中, 虽然这些函数仍然可用, 但是不推荐使用, 并且在Python 3.0中将被去掉. string模块也包含了一些有用的常量和类来处理字符串和unicode对象, 后面的讨论会集中在这个方面. Functions string.capwords(s, sep=None):使用str.split()将参数分成单词,使用st

Python 变量&对象初识

Python中没有常量类型,但为了与其他语言保持一致,我们约定用全大写的变量名代表常量. 关于变量创建,与c不同,python的变量只有在被赋值之后,才会被创建,才会被分配内存空间. 变量不需要声明类型,赋值即包含了声明和定义. 对变量赋值,实际上是把对象的引用赋给变量.本质上,Python的变量与c中的指针类似. a=1 #这里的1实际上是一个整型对象,不可变对象,变量a指向这个对象的地址. b=a #变量b同样指向1这个对象的地址. a=2 #2是新创建的整型对象,指针a指向2的地址,此时,

深入理解python(一)python语法总结:基础知识和对python中对象的理解

用python也用了两年了,趁这次疫情想好好整理下. 大概想法是先对python一些知识点进行总结,之后就是根据python内核源码来对python的实现方式进行学习,不会阅读整个源码,,,但是应该会把数据结构的实现.函数调用过程.以及python虚拟机的基本原理根据源码解释下. 当然限于笔者只是一个弱鸡,,,如内容有疏漏的地方或者是一些错误,希望看到的大佬不吝赐教. 第一部分 python语法总结 当然如果对python语法还是一无所知的同学请移步缪雪峰或者菜鸟教程等学习网站看一遍再过来,,,

String s=new String("xyz");创建几个String对象的问题

首先让我们了解几个概念: 栈 :由JVM分配区域,用于保存线程执行的动作和数据引用. 堆 :由JVM分配的,用于存储对象等数据的区域. 常量池constant pool :在堆中分配出来的一块存储区域,用于存储显式 的String,float或者integer.这是一个特殊的共享区域,可以在内存中共享的不经常改变的东西,都可以放在这里. 进入正题: String a = "abc";①String b = "abc";② 使用String a = "abc

实习第二天-String对象的不可变性-未解决

public class Reverse { public static void main(String[] args) { String c1=new String("abc"); String c2=new String("abc"); String c3=c1; System.out.println("c1==c2:"+ (c1==c2)); //c1==c2:false 第一个输出语句c1==c2很好理解,因为c1和c2都是用new 创

C风格字符串和C++ string 对象赋值操作的性能比较

<<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: 1 #include "stdafx.h" 2 #include <iostream> 3 #include <string> 4 #include <vector> 5 #include <ctime> 6 7 using namespace

&lt;JavaScript&gt; 一. string对象的属性和方法

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title></title> 5 <script type="text/javascript"> 6 /* 7 string 对象 8 */ 9 10 // ------------- 属性 ------------- 11 // 1. length属性: 获取字符串的长度 12 var str = "Hello, world!