真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python列表復(fù)制函數(shù) python怎么復(fù)制列表

如何使用python復(fù)制大概200G的數(shù)據(jù)[任何語(yǔ)言只要能實(shí)現(xiàn)]

如果我理解的正確的話,樓主是要copy大文件吧。

在含山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營(yíng)銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),含山網(wǎng)站建設(shè)費(fèi)用合理。

python最經(jīng)常使用的copy函數(shù),應(yīng)該是shutil.copyfile()了,它默認(rèn)以16384bytes 的大小作為緩沖區(qū),對(duì)于小的文件,的確不錯(cuò)。但是處理到大的文件的時(shí)候,性能下降就很嚴(yán)重。過(guò)小的buffer會(huì)不合適。

經(jīng)過(guò)多次的嘗試,發(fā)現(xiàn)10Mb的buffer最合適,再高也沒(méi)有性能的提升。重載后的copy函數(shù)如下

def?copyFile(src,?dst,?buffer_size=10485760,?perserveFileDate=True):

'''

Copies?a?file?to?a?new?location.?Much?faster?performance?than?Apache?Commons?due?to?use?of?larger?buffer

@param?src:????Source?File

@param?dst:????Destination?File?(not?file?path)

@param?buffer_size:????Buffer?size?to?use?during?copy

@param?perserveFileDate:????Preserve?the?original?file?date

'''

#????Check?to?make?sure?destination?directory?exists.?If?it?doesn't?create?the?directory

dstParent,?dstFileName?=?os.path.split(dst)

if(not(os.path.exists(dstParent))):

os.makedirs(dstParent)

#????Optimize?the?buffer?for?small?files

buffer_size?=?min(buffer_size,os.path.getsize(src))

if(buffer_size?==?0):

buffer_size?=?1024

if?shutil._samefile(src,?dst):

raise?shutil.Error("`%s`?and?`%s`?are?the?same?file"?%?(src,?dst))

for?fn?in?[src,?dst]:

try:

st?=?os.stat(fn)

except?OSError:

#?File?most?likely?does?not?exist

pass

else:

#?XXX?What?about?other?special?files??(sockets,?devices...)

if?shutil.stat.S_ISFIFO(st.st_mode):

raise?shutil.SpecialFileError("`%s`?is?a?named?pipe"?%?fn)

with?open(src,?'rb')?as?fsrc:

with?open(dst,?'wb')?as?fdst:

shutil.copyfileobj(fsrc,?fdst,?buffer_size)

if(perserveFileDate):

shutil.copystat(src,?dst)

使用的時(shí)候記得添加相應(yīng)的包。

Python對(duì)象的拷貝

Python賦值操作或函數(shù)參數(shù)傳遞,傳遞的永遠(yuǎn)是對(duì)象引用(即內(nèi)存地址),而不是對(duì)象內(nèi)容。在Python中一切皆對(duì)象,對(duì)象又分為可變(mutable)和不可變(immutable)兩種類型。對(duì)象拷貝是指在內(nèi)存中創(chuàng)建新的對(duì)象,產(chǎn)生新的內(nèi)存地址。當(dāng)頂層對(duì)象和它的子元素對(duì)象全都是immutable不可變對(duì)象時(shí),不存在被拷貝,因?yàn)闆](méi)有產(chǎn)生新對(duì)象。淺拷貝(Shallow Copy),拷貝頂層對(duì)象,但不會(huì)拷貝內(nèi)部的子元素對(duì)象。深拷貝(Deep Copy),遞歸拷貝頂層對(duì)象,以及它內(nèi)部的子元素對(duì)象。

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

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

對(duì)象拷貝是指在內(nèi)存中創(chuàng)建新的對(duì)象,產(chǎn)生新的內(nèi)存地址。

淺拷貝(Shallow Copy),拷貝頂層對(duì)象,但不會(huì)拷貝內(nèi)部的子元素對(duì)象。

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

當(dāng)頂層對(duì)象是mutable可變對(duì)象,但是它的子元素對(duì)象全都是immutable不可變對(duì)象時(shí),如[1, 'world', 2]

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

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

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

當(dāng)頂層對(duì)象是 mutable可變對(duì)象 ,但子元素也存在 mutable可變對(duì)象 時(shí),如 [1, 2, ['hello','world']]

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

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

當(dāng)頂層對(duì)象是immutable不可變對(duì)象,同時(shí)它的子元素對(duì)象也全都是immutable不可變對(duì)象時(shí),如(1, 2, 3)

變量a與變量b指向的是同一個(gè)元組對(duì)象,沒(méi)有拷貝

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

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

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

當(dāng)頂層對(duì)象是mutable可變對(duì)象,但是它的子元素對(duì)象全都是immutable不可變對(duì)象時(shí),如[1, 'world', 2]

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

當(dāng)頂層對(duì)象是mutable可變對(duì)象,但子元素也存在mutable可變對(duì)象時(shí),如[1, 2, ['hello','world']]

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

當(dāng)頂層對(duì)象是immutable不可變對(duì)象,同時(shí)它的子元素對(duì)象也全都是immutable不可變對(duì)象時(shí),如(1, 2, 3)

變量a與變量b指向的是同一個(gè)元組對(duì)象,不存在拷貝

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

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

使用=是賦值,即將列表對(duì)象的引用也賦值給變量b,可以將列表對(duì)象想像成一個(gè)盒子,變量a相當(dāng)于這個(gè)盒子上的標(biāo)簽,執(zhí)行b = a后,相當(dāng)于再在這個(gè)盒子上貼上b標(biāo)簽,a和b實(shí)際上指向的是同一個(gè)對(duì)象。因此,無(wú)論我們是通過(guò)a還是通過(guò)b來(lái)修改列表的內(nèi)容,其結(jié)果都會(huì)作用于雙方。

b/c/d都是a的復(fù)制,它們都指向了不同的列表對(duì)象,但是沒(méi)有拷貝子元素,a[2]和b[2]/c[2]/d[2]指向同一個(gè)列表, 相當(dāng)于淺拷貝的效果

使用分片[:]操作,a和b其實(shí)是指向同一個(gè)元組,而且沒(méi)有拷貝子元素,a[2]和b[2]也指向同一個(gè)列表,相當(dāng)于淺拷貝的效果

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

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

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

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

python列表怎么復(fù)制

提問(wèn)者這么短的描述,有點(diǎn)無(wú)法看懂,那就按照通常的幾種方法來(lái)說(shuō)吧:

簡(jiǎn)單列表的拷貝

已知一個(gè)列表,求生成一個(gè)新的列表,列表元素是原列表的復(fù)制

a=[1,2]

b=a

這種其實(shí)并未真正生成一個(gè)新的列表,b指向的仍然是a所指向的對(duì)象。

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

可以使用以下方法解決:

a=[1,2]

b=a[:]

這樣修改a對(duì)b沒(méi)有影響。修改b對(duì)a沒(méi)有影響。

復(fù)雜列表的拷貝:

可以使用copy模塊中的deepcopy函數(shù)。修改測(cè)試如下:

import copy

a=[1,[2]]

b=copy.deepcopy(a)

如何塊 Python 3 中的列表

序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個(gè)元素都分配一個(gè)數(shù)字 - 它的位置,或索引,第一個(gè)索引是0,第二個(gè)索引是1,依此類推。

Python有6個(gè)序列的內(nèi)置類型,但最常見(jiàn)的是列表和元組。

序列都可以進(jìn)行的操作包括索引,切片,加,乘,檢查成員。

此外,Python已經(jīng)內(nèi)置確定序列的長(zhǎng)度以及確定最大和最小的元素的方法。

列表是最常用的Python數(shù)據(jù)類型,它可以作為一個(gè)方括號(hào)內(nèi)的逗號(hào)分隔值出現(xiàn)。

列表的數(shù)據(jù)項(xiàng)不需要具有相同的類型

創(chuàng)建一個(gè)列表,只要把逗號(hào)分隔的不同的數(shù)據(jù)項(xiàng)使用方括號(hào)括起來(lái)即可。如下所示:

list1 = ['Google', 'Runoob', 1997, 2000];list2 = [1, 2, 3, 4, 5 ];list3 = ["a", "b", "c", "d"];

與字符串的索引一樣,列表索引從0開始。列表可以進(jìn)行截取、組合等。

訪問(wèn)列表中的值

使用下標(biāo)索引來(lái)訪問(wèn)列表中的值,同樣你也可以使用方括號(hào)的形式截取字符,如下所示:

實(shí)例(Python 3.0+)

#!/usr/bin/python3

list1 = ['Google', 'Runoob', 1997, 2000];list2 = [1, 2, 3, 4, 5, 6, 7 ];

print ("list1[0]: ", list1[0])print ("list2[1:5]: ", list2[1:5])

運(yùn)行實(shí)例 ?

以上實(shí)例輸出結(jié)果:

list1[0]: Google

list2[1:5]: [2, 3, 4, 5]

更新列表

你可以對(duì)列表的數(shù)據(jù)項(xiàng)進(jìn)行修改或更新,你也可以使用append()方法來(lái)添加列表項(xiàng),如下所示:

實(shí)例(Python 3.0+)

#!/usr/bin/python3

list = ['Google', 'Runoob', 1997, 2000]

print ("第三個(gè)元素為 : ", list[2])list[2] = 2001print ("更新后的第三個(gè)元素為 : ", list[2])

注意:我們會(huì)在接下來(lái)的章節(jié)討論append()方法的使用

以上實(shí)例輸出結(jié)果:

第三個(gè)元素為 : 1997

更新后的第三個(gè)元素為 : 2001

刪除列表元素

可以使用 del 語(yǔ)句來(lái)刪除列表的的元素,如下實(shí)例:

實(shí)例(Python 3.0+)

#!/usr/bin/python3

list = ['Google', 'Runoob', 1997, 2000]

print (list)del list[2]print ("刪除第三個(gè)元素 : ", list)

以上實(shí)例輸出結(jié)果:

刪除第三個(gè)元素 : ['Google', 'Runoob', 2000]

注意:我們會(huì)在接下來(lái)的章節(jié)討論remove()方法的使用

Python列表腳本操作符

列表對(duì) + 和 * 的操作符與字符串相似。+ 號(hào)用于組合列表,* 號(hào)用于重復(fù)列表。

如下所示:

Python 表達(dá)式

結(jié)果

描述

len([1, 2, 3]) 3 長(zhǎng)度

[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 組合

['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重復(fù)

3 in [1, 2, 3] True 元素是否存在于列表中

for x in [1, 2, 3]: print(x, end=" ") 1 2 3 迭代

Python列表截取與拼接

Python的列表截取與字符串操作類型,如下所示:

L=['Google', 'Runoob', 'Taobao']

操作:

Python 表達(dá)式

結(jié)果

描述

L[2] 'Taobao' 讀取第三個(gè)元素

L[-2] 'Runoob' 從右側(cè)開始讀取倒數(shù)第二個(gè)元素: count from the right

L[1:] ['Runoob', 'Taobao'] 輸出從第二個(gè)元素開始后的所有元素

L=['Google', 'Runoob', 'Taobao'] L[2]'Taobao' L[-2]'Runoob' L[1:]['Runoob', 'Taobao']

列表還支持拼接操作:

squares = [1, 4, 9, 16, 25] squares + [36, 49, 64, 81, 100][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

嵌套列表

使用嵌套列表即在列表里創(chuàng)建其它列表,例如:

a = ['a', 'b', 'c'] n = [1, 2, 3] x = [a, n] x[['a', 'b', 'c'], [1, 2, 3]] x[0]['a', 'b', 'c'] x[0][1]'b'

Python列表函數(shù)方法

Python包含以下函數(shù):

序號(hào)

函數(shù)

1 len(list)

列表元素個(gè)數(shù)

2 max(list)

返回列表元素最大值

3 min(list)

返回列表元素最小值

4 list(seq)

將元組轉(zhuǎn)換為列表

Python包含以下方法:

序號(hào)

方法

1 list.append(obj)

在列表末尾添加新的對(duì)象

2 list.count(obj)

統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)

3 list.extend(seq)

在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來(lái)的列表)

4 list.index(obj)

從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置

5 list.insert(index, obj)

將對(duì)象插入列表

6 list.pop(obj=list[-1])

移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值

7 list.remove(obj)

移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)

8 list.reverse()

反向列表中元素

9 list.sort([func])

對(duì)原列表進(jìn)行排序

10 list.clear()

清空列表

11 list.copy()

復(fù)制列表

python常用列表函數(shù)

1

len(list)

列表元素個(gè)數(shù)

2

max(list)

返回列表元素最大值

3

min(list)

返回列表元素最小值

4

list(seq)

將元組轉(zhuǎn)換為列表

序號(hào)

方法

1

list.append(obj)

在列表末尾添加新的對(duì)象

2

list.count(obj)

統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)

3

list.extend(seq)

在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來(lái)的列表)

4

list.index(obj)

從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置

5

list.insert(index, obj)

將對(duì)象插入列表

6

list.pop([index=-1])

移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值

7

list.remove(obj)

移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)

8

list.reverse()

反向列表中元素

9

list.sort( key=None, reverse=False)

對(duì)原列表進(jìn)行排序

10

list.clear()

清空列表

11

list.copy()

復(fù)制列表

Python3 & 淺拷貝與深拷貝

在Python中對(duì)象的賦值(=)其實(shí)就是對(duì)象的引用。即:當(dāng)創(chuàng)建一個(gè)對(duì)象,把它賦值給另一個(gè)變量時(shí),python并沒(méi)有拷貝這個(gè)對(duì)象,只是拷貝了這個(gè)對(duì)象的引用而已。

Python中對(duì)象的拷貝分為:淺拷貝(copy)和深拷貝(deepcopy)。

淺拷貝:拷貝了最外圍的對(duì)象本身,內(nèi)部的元素都只是拷貝了一個(gè)引用而已。也就是,將原對(duì)象在內(nèi)存中引用地址拷貝過(guò)來(lái),然后讓新的對(duì)象指向這個(gè)地址??梢允褂谩?”或列表自帶的copy()函數(shù)(如list.copy()),或使用copy模塊的copy()函數(shù)。

深拷貝:外圍和內(nèi)部元素都進(jìn)行了拷貝對(duì)象本身,而不是引用。即把對(duì)象復(fù)制一遍,并且該對(duì)象中引用的其他對(duì)象也同時(shí)復(fù)制,完全得到一個(gè)新的一模一樣的對(duì)象,對(duì)新對(duì)象里的值進(jìn)行修改不會(huì)影響原有對(duì)象,新對(duì)象和原對(duì)象完全分離開。深拷貝只能使用copy模塊中deepcopy()函數(shù),使用前要導(dǎo)入:from copy import deepcopy。

Python中對(duì)象分為不可變對(duì)象 、可變對(duì)象。

不可變對(duì)象:一旦創(chuàng)建就不可修改的對(duì)象,例如:字符串、元組、數(shù)字

可變對(duì)象:可以修改的對(duì)象,例如:列表、字典。

其中Python中的切片可以應(yīng)用于:列表、元組、字符串,但不能應(yīng)用于字典。

而深淺拷貝,可應(yīng)用于序列(列表、元組、字符串),也可應(yīng)用于字典。

其中不可變對(duì)象,不管是深拷貝還是淺拷貝,地址值在拷貝后的值都是一樣的。

以下以元組(不可變類型)為例

從上述示例可以看出:

不可變對(duì)象類型,沒(méi)有被拷貝的說(shuō)法,即便是用深拷貝,查看id的話也是一樣的,如果對(duì)其重新賦值,也只是新創(chuàng)建一個(gè)對(duì)象,替換掉舊的而已。

所以不可變類型,不管是深拷貝還是淺拷貝,地址值和拷貝后的值都是一樣的。

以下以列表(可變類型)為例

第一種方法:使用=號(hào)淺拷貝

輸出結(jié)果:

第二種方法:使用copy淺拷貝

輸出結(jié)果:

第三種方法:使用deepcopy深拷貝

輸出結(jié)果:

從上述示例可以看出:

=淺拷貝:值相等,地址相等

copy淺拷貝:值相等,地址不相等

deepcopy深拷貝:值相等,地址不相等

總結(jié):

1,深淺拷貝都是對(duì)源對(duì)象的復(fù)制,占用不同的內(nèi)存空間。

2,不可變類型的對(duì)象,對(duì)于深淺拷貝毫無(wú)影響,最終的地址值和值都是相等的。

3,可變類型的對(duì)象,使用=淺拷貝時(shí), 值相等,地址相等,對(duì)新對(duì)象里的值進(jìn)行修改同時(shí)會(huì)影響原有對(duì)象;使用copy淺拷貝時(shí)值相等,地址不相等;使用deepcopy深拷貝時(shí)值相等,地址不相等。可以看出針對(duì)可變類型copy淺拷貝和deepcopy深拷貝,對(duì)新對(duì)象里的值進(jìn)行修改不會(huì)影響原有對(duì)象。


本文名稱:python列表復(fù)制函數(shù) python怎么復(fù)制列表
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/hjijhg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部