在python效率的討論問題中字符串的連接效率有提過掸茅,多數(shù)建議使用join來代替"+"進行字符串連接
python中一切皆對象 字符串對象就是c api中得stringobject.c看python源碼的objects文件可以找到
1."+"预明。使用加號連接2個字符串會調(diào)用靜態(tài)函數(shù)string_concat(register PyStringObject *a ,register PyObject * b),在這個函數(shù)中會開辟一塊大小是a+b的內(nèi)存的和的存儲單元贸铜,然后將a,b字符串拷貝進去,試想一下侈离,如果是n個字符串相連? 那么會開辟n-1次內(nèi)存试幽,是比較耗費資源的
2.對于使用join函數(shù) "".join([a,b])? 會調(diào)用string_join函數(shù)? 會計算列表的長度? 一次分配一塊內(nèi)存然后拷貝,所以n個字符串相連 開辟內(nèi)存的次數(shù)是1次
所以如果只有2個相連效率區(qū)別不大? 但是數(shù)據(jù)多了就會有問題
加點東西(筆記)? python與c語言在創(chuàng)建變量時候的不同
1。整數(shù),python有小整數(shù)緩沖池? 有一個范圍? 當定義一個整數(shù)a=3.然后刪除這個整數(shù)使用b=3發(fā)現(xiàn)a,b的地址一樣的 再使用 c = 1000023執(zhí)行上面的操作我們發(fā)現(xiàn)2個數(shù)的地址不一樣? 小整數(shù)緩沖池
2卦碾。python中定義一個字符串s = "hello",g = "hello"后 ,s,g的地址相同 ,c語言定義char a[5] = "hello",char b[5] = "hello" 铺坞,a和b的字符串地址不同 ,說明又申請了一塊內(nèi)存,python使用的interned機制 首先查詢