python腳本輸入可變參數(shù) 有哪些用Python語(yǔ)言講算法和數(shù)據(jù)結(jié)構(gòu)的書?
有哪些用Python語(yǔ)言講算法和數(shù)據(jù)結(jié)構(gòu)的書?Python通用數(shù)據(jù)結(jié)構(gòu)全白原理Python中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)可以統(tǒng)稱為du作為一個(gè)容器。有序的zhi列(比如dao列表和元組)、映射(比如字典)和集合是三
有哪些用Python語(yǔ)言講算法和數(shù)據(jù)結(jié)構(gòu)的書?
Python通用數(shù)據(jù)結(jié)構(gòu)全白原理
Python中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)可以統(tǒng)稱為du作為一個(gè)容器。有序的zhi列(比如dao列表和元組)、映射(比如字典)和集合是三種主要的容器類型。
I .序列(列表、元組和字符串)
序列中的每個(gè)元素都有自己的編號(hào)。Python中有六個(gè)內(nèi)置序列。列表和元組是最常見(jiàn)的類型。其他包括字符串、Unicode字符串、緩沖區(qū)對(duì)象和xrange對(duì)象。下面重點(diǎn)介紹以下列表、元組和字符串。
1.目錄
列表是可變的,這是它區(qū)別于字符串和元組的最重要的特征??傊?,列表可以被修改,但是字符串和元組可以。;t.
(1)、創(chuàng)建
您可以通過(guò)以下創(chuàng)建列表:
一個(gè)
2
三
四
列表1[你好,世界]
打印列表1
列表2[1,2,3]
打印列表2
輸出:
[你好,世界]
[1, 2, 3]
如您所見(jiàn),該方法與javascript中的數(shù)組非常相似。
(2)列表功能
list函數(shù)(事實(shí)上,list是一種類型而不是函數(shù))對(duì)于創(chuàng)建字符串列表非常有效:
一個(gè)
2
列表3列表(你好)
打印列表3
輸出:
[h,
Python中賦值,淺拷貝,深拷貝都是什么意思?
和很多語(yǔ)言一樣,Python可以分為簡(jiǎn)單賦值、淺層復(fù)制和深層復(fù)制。
在學(xué)習(xí)的過(guò)程中,對(duì)淺抄的理解一開(kāi)始是非常模糊的。但是,經(jīng)過(guò)一系列的實(shí)驗(yàn),我發(fā)現(xiàn)我對(duì)這三個(gè)概念有了更好的理解。
一.轉(zhuǎn)讓
賦值是這三種操作中最常見(jiàn)的。讓 讓我們通過(guò)一些例子來(lái)分析賦值操作:
Str案例
代碼如下:: gtgt gt A hellogtgt B hellogtgt C AGT gtt[ID(x)for x in A,B,c] [4404120000,4404120000,4404120000]從上面的指令中,我們可以發(fā)現(xiàn)A,B,C的地址是相同的。所以上面的賦值操作相當(dāng)于c a b hello。
賦值是指系統(tǒng)先給一個(gè)變量或?qū)ο蠓峙鋬?nèi)存(你好這里),然后再給A、B、c分配地址。。所以他們的地址是一樣的。
列表示例
代碼如下::,gtgt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt,gt [ID (x) for x in a,b,c] [403975952,40 Why?
因?yàn)閟tr是不可變的,h: gtgt gt A world gtgtgt[ID(x)for x in A,B,c] [4404120432,4404120000,4404120000] gtgt print a,B,c world hello hello此時(shí),A的地址和值發(fā)生了變化,但B,C的地址和值沒(méi)有變化。由于str的不變性,A需要重新打開(kāi)內(nèi)存空間重新賦值,所以A的值發(fā)生變化,A指向的地址也發(fā)生變化。b和C不會(huì)因?yàn)閔: gtgt gt a[0]world gtgtgt[ID(x)for x in a,b,c] [4403975952,4404095096,4403975952] gtgt print a,b,c [world] [world]。由于list的可變性,修改list的值不需要再開(kāi)辟一個(gè)空間,只需要修改原地址的值即可。所以a和c都變了。
了解了以上的區(qū)別,就可以很好的分析淺抄和深抄了。
我們都用list做例子。
第二,淺層復(fù)制
代碼如下:: gtgt gt A[你好,[123,234]]gtgt gt B A[:]gtgt t[ID(x)for x in A,b] [4496003656,4496066752]gtgt gt[ID(x)for x in A][4496091584,4495947536]gtgt gt[ID(x)for x in B][449606067536列表是可變的,所以要開(kāi)辟不同的空間。淺抄是抄嗎?看第5行-
8.我們發(fā)現(xiàn)A和B中元素的地址是相同的。說(shuō)字符串的h: gtgt gt a[0]worldgtgtgt a[1]。附加(345) gtgt gt打印a,a,
在,b,ba [world,[123,234,345]] b [h: gtgt from copy import deepcopygtgt A[hello,[123,234]]gtgt B deepcopy(A)gtgt[ID(x)for x in A,b] [4496066824,4496066680]gtgt gt[ID(x)for x in A][4496091584,4496067040]gtgt gt[ID(x)for x in B][這是一個(gè)完整的副本。
修改a的值后:
復(fù)制代碼如下:: gtgt gt a[0]worldgtgtgt a[1]。附加(345) gtgt gt打印a,a,
,B,ba [world,[123,234,345]] b [hello,[123,234]]從第4,5行可以發(fā)現(xiàn),只修改了A,B根本沒(méi)有修改。因?yàn)锽是完整的副本,所以元素地址都和A不一樣,如果A被修改,B不會(huì)受到影響。
總結(jié):
1.賦值就是把一個(gè)對(duì)象的地址賦給一個(gè)變量,讓變量指向地址(舊瓶裝新酒)。
2.淺拷貝是在另一個(gè)地址創(chuàng)建一個(gè)新的變量或容器,但容器中元素的地址都是源對(duì)象元素地址的拷貝。即據(jù)說(shuō)新容器指向舊元素(新瓶裝舊酒)。
3.深度拷貝是在另一個(gè)地址創(chuàng)建一個(gè)新的變量或容器,同時(shí)容器中元素的地址也是新打開(kāi)的,只是值相同,這是一個(gè)完整的拷貝。也就是說(shuō)(新瓶裝新酒)。