成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

闡述PyString Object對象源代碼

開發 后端
在對PyIntObject的分析中,我們看到了Python中的具有不可變長度數據的對象(定長對象)。在Python中,還大量存在著另一種對象。

Python也被稱為是一門非常透徹的語言,在當初設計者當初設計它的時候,大體的指導思想,就是對于一個特定的問題,只要有一種最好的方法來解決就OK了,下面對Python PyStringObject對象說明。

與定長對象不同,對于變長對象而言,對象維護的數據的長度在對象定義時是不知道的。對于PyIntObject來說,其維護的數據的長度在對象定義時就已經確定了。是一個long變量的長度;而可變對象維護的數據的長度只能在對象創建時才能確定,考慮一下,我們只能在創建一個字符串或一個列表時才知道它們所維護的數據的長度,在此之前,對這個信息,我們一無所知。

在變長對象中,實際上還可分為可變對象(mutable)和不可變對象(immutable),可變對象是在對象創建之后,其維護的數據的長度還能變化的對象。比如一個list被創建后,可以向其中添加元素或刪除元素。

這些操作都會改變其維護的數據的長度;而不可變對象所維護的數據在對象創建之后就不能再改變了,比如Python中的string和tuple,它們都不支持添加或刪除的操作。本章我們將研究Python變長對象中的不可變對象——字符串對象。

在Python中,PyStringObject是對字符串對象的抽象和表示。PyStringObject對象是一個擁有可變長度內存的對象,這一點非常容易理解,因為對于表示”Hi”和”Python”的兩個不同的PyStringObject對象,其內部需要的保存字符串內容的內存空間顯然是不一樣的。

但同時,PyStringObject對象又是一個不變對象(Immutable)。當創建了一個PyStringObject對象之后,該對象內部維護的字符串就不能再被改變了。這一點特性使得PyStringObject對象能作為PyDictObject的鍵值,但同時也使得一些字符串操作的效率大大降低,比如多個字符串的連接操作。

PyStringObject對象的聲明如下:

  1. [stringobject.h]   
  2. typedef struct {   
  3.  PyObject_VAR_HEAD  
  4.   long ob_shash;    
  5. int ob_sstate;    
  6. char ob_sval[1];} PyStringObject

PyStringObject的定義中我們看到,在PyStringObject對象的頭部實際上是一個PyObject_VAR_HEAD,其中有一個ob_size變量保存著對象中維護的可變長度內存的長度。雖然在PyStringObject的定義中,ob_sval是一個字符的字符數組。

但是ob_sval實際上是作為一個字符指針指向了一段內存,這段內存保存著這個字符串對象所維護的實際字符串,顯然,這段內存不會只是一個字節。而這段內存的實際長度(字節),正是由ob_size來維護,這個機制是Python中所有擁有可變長度內存的對象的實現機制。比如對于PyStringObject對象”Python”,ob_size的值就是6。

同C中的字符串一樣,PyStringObject內部維護的字符串在末尾必須以’\0’結尾,但是由于字符串的實際長度是由ob_size維護的,所以PyStringObject表示的字符串對象中間是可能出現字符’\0’的,這一點與C語言中不同,因為在C中。只要遇到了字符’\0’,就認為一個字符串結束了。所以,實際上,ob_sval指向的是一段長度為ob_size+1個字節的內存,而且必須滿足ob_sval[ob_size] = ‘\0’。

【編輯推薦】

  1. 如何使Python嵌入C++應用程序?
  2. 深入探討Ruby與Python語法比較
  3. Python學習資料介紹分享
  4. Python學習經驗談:版本、IDE選擇及編碼解 決方案
  5. 淺析Python的GIL和線程安全
責任編輯:chenqingxiang 來源: NET130
相關推薦

2010-02-01 16:14:33

Python PySt

2010-03-18 14:46:18

Java SynDem

2010-01-06 10:58:06

建立JavaScrip

2009-12-01 13:10:29

VS2003壓縮代碼

2020-11-13 13:05:27

Java開發代碼

2010-10-09 09:56:51

JavaScriptObject對象

2009-04-03 08:28:39

2011-02-23 14:46:21

FileZilla

2023-03-27 18:22:05

2011-02-23 14:54:58

FileZilla

2011-02-23 14:16:43

FileZilla

2011-02-23 14:39:27

FileZilla

2020-11-14 11:20:56

滲透測試Cobalt Stri源代碼

2010-03-12 14:28:45

Python if語句

2011-02-23 14:26:28

FileZilla

2011-02-23 15:11:27

FileZilla

2011-02-23 15:33:42

FileZilla

2011-05-26 14:17:16

Android 源代碼

2011-02-23 15:21:06

FileZilla

2011-02-23 13:47:33

FileZilla
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草.com| av一区二区三区四区 | 久久成人一区 | 欧美一级片免费看 | 亚洲欧洲成人在线 | 中文字幕在线视频观看 | 国产精品视频免费播放 | 国产精品久久久久久久久久 | 国产精品久久久久久久岛一牛影视 | 精品国产视频在线观看 | 99久久精品免费看国产四区 | 欧美精品电影一区 | 国产精品伦一区二区三级视频 | 国产成人精品一区二区 | 日韩欧美国产精品一区二区 | 精品久久国产 | 久色网 | 国产精品极品美女在线观看免费 | 一区二区三区四区在线 | 91婷婷韩国欧美一区二区 | 精品一区二区三区日本 | 午夜av成人 | 日日夜夜视频 | 精品人伦一区二区三区蜜桃网站 | 免费一级淫片aaa片毛片a级 | 国产第一页在线播放 | av黄色片在线观看 | 国产精品久久久久久久毛片 | 欧美黄色片| 嫩草一区二区三区 | 欧美日韩亚洲成人 | 成人国产在线视频 | 久久9久 | 欧美激情精品久久久久久变态 | 久久精品国产一区二区电影 | 亚欧精品一区 | 午夜精品一区 | 午夜影院视频在线观看 | 久久99精品久久久久久琪琪 | 免费视频二区 | 不卡在线视频 |