欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python的復制函數 python如何復制

python列表怎么復制

提問者這么短的描述,有點無法看懂,那就按照通常的幾種方法來說吧:

成都創(chuàng)新互聯公司專注于中大型企業(yè)的做網站、網站建設和網站改版、網站營銷服務,追求商業(yè)策劃與數據分析、創(chuàng)意藝術與技術開發(fā)的融合,累計客戶上千,服務滿意度達97%。幫助廣大客戶順利對接上互聯網浪潮,準確優(yōu)選出符合自己需要的互聯網運用,我們將一直專注品牌網站設計和互聯網程序開發(fā),在前進的路上,與客戶一起成長!

簡單列表的拷貝

已知一個列表,求生成一個新的列表,列表元素是原列表的復制

a=[1,2]

b=a

這種其實并未真正生成一個新的列表,b指向的仍然是a所指向的對象。

后果:如果對a或b的元素進行修改,a,b的值同時發(fā)生變化。

可以使用以下方法解決:

a=[1,2]

b=a[:]

這樣修改a對b沒有影響。修改b對a沒有影響。

復雜列表的拷貝:

可以使用copy模塊中的deepcopy函數。修改測試如下:

import copy

a=[1,[2]]

b=copy.deepcopy(a)

python函數有哪些

1、print()函數:打印字符串;

2、raw_input()函數:從用戶鍵盤捕獲字符;

3、len()函數:計算字符長度;

4、format()函數:實現格式化輸出;

5、type()函數:查詢對象的類型;

6、int()函數、float()函數、str()函數等:類型的轉化函數;

7、id()函數:獲取對象的內存地址;

8、help()函數:Python的幫助函數;

9、s.islower()函數:判斷字符小寫;

10、s.sppace()函數:判斷是否為空格;

11、str.replace()函數:替換字符;

12、import()函數:引進庫;

13、math.sin()函數:sin()函數;

14、math.pow()函數:計算次方函數;

15、os.getcwd()函數:獲取當前工作目錄;

16、listdir()函數:顯示當前目錄下的文件;

17、time.sleep()函數:停止一段時間;

18、random.randint()函數:產生隨機數;

19、range()函數:返回一個列表,打印從1到100;

20、file.read()函數:讀取文件返回字符串;

21、file.readlines()函數:讀取文件返回列表;

22、file.readline()函數:讀取一行文件并返回字符串;

23、split()函數:用什么來間隔字符串;

24、isalnum()函數:判斷是否為有效數字或字符;

25、isalpha()函數:判斷是否全為字符;

26、isdigit()函數:判斷是否全為數字;

27、 lower()函數:將數據改成小寫;

28、upper()函數:將數據改成大寫;

29、startswith(s)函數:判斷字符串是否以s開始的;

30、endwith(s)函數:判斷字符串是否以s結尾的;

31、file.write()函數:寫入函數;

32、file.writeline()函數:寫入文件;

33、abs()函數:得到某數的絕對值;

34、file.sort()函數:對書數據排序;

35、tuple()函數:創(chuàng)建一個元組;

36、find()函數:查找 返回的是索引;

37、dict()函數:創(chuàng)建字典;

38、clear()函數:清楚字典中的所有項;

39、copy()函數:復制一個字典,會修改所有的字典;

40、 get()函數:查詢字典中的元素。

…………

python字典操作函數

字典是一種通過名字或者關鍵字引用的得數據結構,其鍵可以是數字、字符串、元組,這種結構類型也稱之為映射。字典類型是Python中唯一內建的映射類型,基本的操作包括如下:

(1)len():返回字典中鍵—值對的數量;

(2)d[k]:返回關鍵字對于的值;

(3)d[k]=v:將值關聯到鍵值k上;

(4)del d[k]:刪除鍵值為k的項;

(5)key in d:鍵值key是否在d中,是返回True,否則返回False。

(6)clear函數:清除字典中的所有項

(7)copy函數:返回一個具有相同鍵值的新字典;deepcopy()函數使用深復制,復制其包含所有的值,這個方法可以解決由于副本修改而使原始字典也變化的問題

(8)fromkeys函數:使用給定的鍵建立新的字典,鍵默認對應的值為None

(9)get函數:訪問字典成員

(10)has_key函數:檢查字典中是否含有給出的鍵

(11)items和iteritems函數:items將所有的字典項以列表方式返回,列表中項來自(鍵,值),iteritems與items作用相似,但是返回的是一個迭代器對象而不是列表

(12)keys和iterkeys:keys將字典中的鍵以列表形式返回,iterkeys返回鍵的迭代器

(13)pop函數:刪除字典中對應的鍵

(14)popitem函數:移出字典中的項

(15)setdefault函數:類似于get方法,獲取與給定鍵相關聯的值,也可以在字典中不包含給定鍵的情況下設定相應的鍵值

(16)update函數:用一個字典更新另外一個字典

(17)?values和itervalues函數:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由于在字典中值不是唯一的,所以列表中可以包含重復的元素

一、字典的創(chuàng)建

1.1 直接創(chuàng)建字典

d={'one':1,'two':2,'three':3}

printd

printd['two']

printd['three']

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

1.2 通過dict創(chuàng)建字典

# _*_ coding:utf-8 _*_

items=[('one',1),('two',2),('three',3),('four',4)]

printu'items中的內容:'

printitems

printu'利用dict創(chuàng)建字典,輸出字典內容:'

d=dict(items)

printd

printu'查詢字典中的內容:'

printd['one']

printd['three']

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

items中的內容:

[('one',1), ('two',2), ('three',3), ('four',4)]

利用dict創(chuàng)建字典,輸出字典內容:

{'four':4,'three':3,'two':2,'one':1}

查詢字典中的內容:

或者通過關鍵字創(chuàng)建字典

# _*_ coding:utf-8 _*_

d=dict(one=1,two=2,three=3)

printu'輸出字典內容:'

printd

printu'查詢字典中的內容:'

printd['one']

printd['three']

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

輸出字典內容:

{'three':3,'two':2,'one':1}

查詢字典中的內容:

二、字典的格式化字符串

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3,'four':4}

printd

print"three is %(three)s."%d

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'four':4,'three':3,'two':2,'one':1}

threeis3.

三、字典方法

3.1?clear函數:清除字典中的所有項

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3,'four':4}

printd

d.clear()

printd

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'four':4,'three':3,'two':2,'one':1}

{}

請看下面兩個例子

3.1.1

# _*_ coding:utf-8 _*_

d={}

dd=d

d['one']=1

d['two']=2

printdd

d={}

printd

printdd

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'two':2,'one':1}

{}

{'two':2,'one':1}

3.1.2

# _*_ coding:utf-8 _*_

d={}

dd=d

d['one']=1

d['two']=2

printdd

d.clear()

printd

printdd

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'two':2,'one':1}

{}

{}

3.1.2與3.1.1唯一不同的是在對字典d的清空處理上,3.1.1將d關聯到一個新的空字典上,這種方式對字典dd是沒有影響的,所以在字典d被置空后,字典dd里面的值仍舊沒有變化。但是在3.1.2中clear方法清空字典d中的內容,clear是一個原地操作的方法,使得d中的內容全部被置空,這樣dd所指向的空間也被置空。

3.2?copy函數:返回一個具有相同鍵值的新字典

# _*_ coding:utf-8 _*_

x={'one':1,'two':2,'three':3,'test':['a','b','c']}

printu'初始X字典:'

printx

printu'X復制到Y:'

y=x.copy()

printu'Y字典:'

printy

y['three']=33

printu'修改Y中的值,觀察輸出:'

printy

printx

printu'刪除Y中的值,觀察輸出'

y['test'].remove('c')

printy

printx

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

初始X字典:

{'test': ['a','b','c'],'three':3,'two':2,'one':1}

X復制到Y:

Y字典:

{'test': ['a','b','c'],'one':1,'three':3,'two':2}

修改Y中的值,觀察輸出:

{'test': ['a','b','c'],'one':1,'three':33,'two':2}

{'test': ['a','b','c'],'three':3,'two':2,'one':1}

刪除Y中的值,觀察輸出

{'test': ['a','b'],'one':1,'three':33,'two':2}

{'test': ['a','b'],'three':3,'two':2,'one':1}

注:在復制的副本中對值進行替換后,對原來的字典不產生影響,但是如果修改了副本,原始的字典也會被修改。deepcopy函數使用深復制,復制其包含所有的值,這個方法可以解決由于副本修改而使原始字典也變化的問題。

# _*_ coding:utf-8 _*_

fromcopyimportdeepcopy

x={}

x['test']=['a','b','c','d']

y=x.copy()

z=deepcopy(x)

printu'輸出:'

printy

printz

printu'修改后輸出:'

x['test'].append('e')

printy

printz

運算輸出:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

輸出:

{'test': ['a','b','c','d']}

{'test': ['a','b','c','d']}

修改后輸出:

{'test': ['a','b','c','d','e']}

{'test': ['a','b','c','d']}

3.3?fromkeys函數:使用給定的鍵建立新的字典,鍵默認對應的值為None

# _*_ coding:utf-8 _*_

d=dict.fromkeys(['one','two','three'])

printd

運算輸出:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':None,'two':None,'one':None}

或者指定默認的對應值

# _*_ coding:utf-8 _*_

d=dict.fromkeys(['one','two','three'],'unknow')

printd

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':'unknow','two':'unknow','one':'unknow'}

3.4?get函數:訪問字典成員

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

printd.get('one')

printd.get('four')

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

1

None

注:get函數可以訪問字典中不存在的鍵,當該鍵不存在是返回None

3.5?has_key函數:檢查字典中是否含有給出的鍵

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

printd.has_key('one')

printd.has_key('four')

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

True

False

3.6?items和iteritems函數:items將所有的字典項以列表方式返回,列表中項來自(鍵,值),iteritems與items作用相似,但是返回的是一個迭代器對象而不是列表

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

list=d.items()

forkey,valueinlist:

printkey,':',value

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

three :3

two :2

one :1

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

it=d.iteritems()

fork,vinit:

print"d[%s]="%k,v

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

d[three]=3

d[two]=2

d[one]=1

3.7?keys和iterkeys:keys將字典中的鍵以列表形式返回,iterkeys返回鍵的迭代器

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

printu'keys方法:'

list=d.keys()

printlist

printu'\niterkeys方法:'

it=d.iterkeys()

forxinit:

printx

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

keys方法:

['three','two','one']

iterkeys方法:

three

two

one

3.8?pop函數:刪除字典中對應的鍵

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

d.pop('one')

printd

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

{'three':3,'two':2}

3.9?popitem函數:移出字典中的項

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

d.popitem()

printd

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':1}

{'two':2,'one':1}

3.10?setdefault函數:類似于get方法,獲取與給定鍵相關聯的值,也可以在字典中不包含給定鍵的情況下設定相應的鍵值

# _*_ coding:utf-8 _*_

d={'one':1,'two':2,'three':3}

printd

printd.setdefault('one',1)

printd.setdefault('four',4)

printd

運算結果:

{'three':3,'two':2,'one':1}

{'four':4,'three':3,'two':2,'one':1}

3.11?update函數:用一個字典更新另外一個字典

# _*_ coding:utf-8 _*_

d={

'one':123,

'two':2,

'three':3

}

printd

x={'one':1}

d.update(x)

printd

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

{'three':3,'two':2,'one':123}

{'three':3,'two':2,'one':1}

3.12?values和itervalues函數:values以列表的形式返回字典中的值,itervalues返回值得迭代器,由于在字典中值不是唯一的,所以列表中可以包含重復的元素

# _*_ coding:utf-8 _*_

d={

'one':123,

'two':2,

'three':3,

'test':2

}

printd.values()

運算結果:

=======RESTART: C:\Users\Mr_Deng\Desktop\test.py=======

[2,3,2,123]

Python對象的拷貝

Python賦值操作或函數參數傳遞,傳遞的永遠是對象引用(即內存地址),而不是對象內容。在Python中一切皆對象,對象又分為可變(mutable)和不可變(immutable)兩種類型。對象拷貝是指在內存中創(chuàng)建新的對象,產生新的內存地址。當頂層對象和它的子元素對象全都是immutable不可變對象時,不存在被拷貝,因為沒有產生新對象。淺拷貝(Shallow Copy),拷貝頂層對象,但不會拷貝內部的子元素對象。深拷貝(Deep Copy),遞歸拷貝頂層對象,以及它內部的子元素對象。

Python中一切皆對象,對象就像一個塑料盒子, 里面裝的是數據。對象有不同類型,例如布爾型和整型,類型決定了可以對它進行的操作。現實生活中的"陶器"會暗含一些信息(例如它可能很重且易碎,注意不要掉到地上)。

對象的類型還決定了它裝著的數據是允許被修改的變量(可變的mutable)還是不可被修改的常量(不可變的immutable)。你可以把不可變對象想象成一個透明但封閉的盒子:你可以看到里面裝的數據,但是無法改變它。類似地,可變對象就像一個開著口的盒子,你不僅可以看到里面的數據,還可以拿出來修改它,但你無法改變這個盒子本身,即你無法改變對象的類型。

對象拷貝是指在內存中創(chuàng)建新的對象,產生新的內存地址。

淺拷貝(Shallow Copy),拷貝頂層對象,但不會拷貝內部的子元素對象。

2.1.1. 頂層是mutable,子元素全是immutable

當頂層對象是mutable可變對象,但是它的子元素對象全都是immutable不可變對象時,如[1, 'world', 2]

① 創(chuàng)建列表對象并賦值給變量a

② 導入copy模塊,使用copy.copy()函數淺拷貝a,并賦值給變量b

③ 修改變量a的子元素a[0] = 3,由于整數是不可變對象,所以并不是修改1變?yōu)?,而是更改a[0]指向對象3

當頂層對象是 mutable可變對象 ,但子元素也存在 mutable可變對象 時,如 [1, 2, ['hello','world']]

① 淺拷貝 copy.copy() 只拷貝了頂層對象,沒有拷貝子元素對象['hello','world'],即a[2]和b[2]指向同一個列表對象

② 修改a[2][1] = 'china',則b[2][1] = 'china'

當頂層對象是immutable不可變對象,同時它的子元素對象也全都是immutable不可變對象時,如(1, 2, 3)

變量a與變量b指向的是同一個元組對象,沒有拷貝

當頂層對象是immutable不可變對象時,但子元素存在mutable可變對象時,如(1, 2, ['hello','world'])

變量a與變量b指向的是相同的元組對象,并且a[2]與b[2]指向同一個列表,所以修改a[2][1]會影響b[2][1]

深拷貝(Deep Copy),遞歸拷貝頂層對象,以及它內部的子元素對象

當頂層對象是mutable可變對象,但是它的子元素對象全都是immutable不可變對象時,如[1, 'world', 2]

變量a與變量b指向不同的列表對象,修改a[0]只是將列表a的第一個元素重新指向新對象,不會影響b[0]

當頂層對象是mutable可變對象,但子元素也存在mutable可變對象時,如[1, 2, ['hello','world']]

深拷貝既拷貝了頂層對象,又遞歸拷貝了子元素對象,所以a[2]與b[2]指向了兩個不同的列表對象(但是列表對象的子元素初始指定的字符串對象一樣),修改a[2][1] = 'china'后,它重新指向了新的字符串對象(內存地址為140531581905808),不會影響到b[2][1]

當頂層對象是immutable不可變對象,同時它的子元素對象也全都是immutable不可變對象時,如(1, 2, 3)

變量a與變量b指向的是同一個元組對象,不存在拷貝

當頂層對象是immutable不可變對象時,但子元素存在mutable可變對象時,如(1, 2, ['hello','world'])

變量a與變量b指向的是不同的元組對象,同時a[2]與b[2]指向不同的列表對象,所以修改a[2][1]不會影響b[2][1]

使用=是賦值,即將列表對象的引用也賦值給變量b,可以將列表對象想像成一個盒子,變量a相當于這個盒子上的標簽,執(zhí)行b = a后,相當于再在這個盒子上貼上b標簽,a和b實際上指向的是同一個對象。因此,無論我們是通過a還是通過b來修改列表的內容,其結果都會作用于雙方。

b/c/d都是a的復制,它們都指向了不同的列表對象,但是沒有拷貝子元素,a[2]和b[2]/c[2]/d[2]指向同一個列表, 相當于淺拷貝的效果

使用分片[:]操作,a和b其實是指向同一個元組,而且沒有拷貝子元素,a[2]和b[2]也指向同一個列表,相當于淺拷貝的效果

同列表類似,可以使用字典的copy()函數或者轉換函數dict()

變量a與變量b/c指向不同的字典,但是沒有拷貝子元素,a['jobs']和b['jobs']/c['jobs']指定同一個列表, 相當于淺拷貝的效果

同列表類似,可以使用集合的copy()函數或者轉換函數set()

變量a與變量b/c指向不同的集合,而集合的元素必須是hashable,所以修改集合a不會影響到b/c

網站名稱:python的復制函數 python如何復制
當前地址:http://chinadenli.net/article16/doeccgg.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站營銷全網營銷推廣服務器托管云服務器軟件開發(fā)手機網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

手機網站建設