歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python中定義字符串和修改字符串的原理

Python中定義字符串和修改字符串的原理

日期:2017/3/1 9:20:57   编辑:Linux編程

Python是用C語言開發的,在C語言中是沒有字符串的概念,只有字符和字符數組,一般用字符數組表示字符串,所以在Python中定義一個字符串時,其實就是在內存中開辟一塊空間,

例如:

定義一個字 符串string1=hello --------->5個字符

字符數組['h','e','l','l','o'],其在內存中存儲的位置為:['h','e','l','l','o']

而如果想要修改該字符串為hellosb,在需要在內存中重新開辟一塊數據空間為:['h','e','l','l','o','s','b']

同樣:如果要修改hello字符串為hello0,則在內存中開辟空間為['h','e','l','l','o','0']

另外如果字符串相加:

"hello"+'sb'+"alex"

在內存中的原理可以理解為:

首先開辟一塊地址空間000001存儲:"hello"

因為“hello”+'sb',所以在接下來又要開辟一塊內存空間000002存儲 "hello"+'sb'

因為"hello"+'sb'後面還要加上另外一個字符串"alex"

所以還要開辟一塊地址空間000003存儲"hello"+'sb'+"alex"

綜上所述:

如果要實現三個字符串"hello"+'sb'+"alex"相加,則需要開辟三塊地址空間

000001-------->"hello"

000002--------->"hello" + 'sb'

000003--------->"hello"+'sb'+"alex"

提示:以上原理對C#和JAVA同樣適用

以上的前面多余的空間對於C語言是可以自動釋放,C#和JAVA是高級語言,他們則是通過虛擬機的垃圾回收機制來釋放前面分配的多余空間(比如:000001,000002)

小結:

Python文件解釋器執行經過的階段:

1、加載內存--->詞法分析--->語法分析--->經過編譯生產成字節碼--->通過虛擬機解釋成機器碼然後交給CPU運行

2、三種編碼:

ascii:只能表示256個字符,因為它只用8位來表示,即2的8次方有256中可能

Unicode:最少用16位來表示字符,即最少用兩個字節來表示字符

utf8:用utf8的原因是因為有些字符在Unicode中用8位就可以來表示,而用16位來表示則顯得浪費,所以用utf8,可以說utf8是Unicode的一個改進版

3、腳本參數[獲取參數用sys模塊的argv功能]

4、字節碼:即後綴為.pyc的文件,如果導入一個文件,並執行它,那麼被導入的文件會自動生成.pyc文件;另外如果被導入的文件與其生成的.pyc內容相同時,在執行的過程中.pyc的優先級要高於被導入的文件(.py),如果被導入的文件做了修改,則需要重新編譯再生成.pyc文件。

5、申明變量的注意事項:

①Python中的變量只能是數字、字母、和下劃線

②Python中的變量開頭不能是數字

③Python的變量名不能是系統規定的關鍵字

6、變量賦值

如果對變量賦值之後,然後再對變量的賦值進行,則需要在內存重新開辟段地址空間,對於C語言而言是沒有字符串的,C語言表示字符串的是字符數組;為什麼不能讓字符串動態的變化,而要每次進行分配?Python中字符數組表示數組的時候它的內存地址是連續的,如果不是連續的,那麼後面的地址就要空出來,那對於一個未知長度的變量,後面的地址要空出來的話我們是不得而知的,也是無法預知的,所以Python中變量地址都是連續的。 在解決這種問題的時候,Python的內部有緩沖池或者數字池或者叫做字符串池的概念,Python它有一塊空間它會自己經過計算,把你經常使用的數字它會放到這個區域裡面,我們在來使用這種頻繁被使用的字符串的時候就可以避免在內存中一次一次的開辟空間。

對於小數字的緩沖空間:-5~257

對於大數字的緩沖空間8~1000

下面關於Python的文章您也可能喜歡,不妨看看:

Python:在指定目錄下查找滿足條件的文件 http://www.linuxidc.com/Linux/2015-08/121283.htm

Python2.7.7源碼分析 http://www.linuxidc.com/Linux/2015-08/121168.htm

無需操作系統直接運行 Python 代碼 http://www.linuxidc.com/Linux/2015-05/117357.htm

CentOS上源碼安裝Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved