リストのPythonの複製(ダイレクトコピー、コピー浅い、深いコピー)

直接割り当て:

もし=直接割り当て、非コピー方法。

これら二つのリストは等価で、リストを変更し、他のリストのいずれかに影響します。

old = [1,[1,2,3],3]
new = []
for i in range(len(old)):
    new.append(old[i])

new[0] = 3
new[1][0] = 3

'''
-----------------------
Before:
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After:
[3, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
-----------------------
'''

 

シャローコピー:

1.copy()メソッド

リスト、深いコピーを達成することであるが、リスト内にネストされた第一の層のために、まだ浅いコピーです。

そのため、アドレスが後でコピーされたときに、ネストされたリストは、過去をコピーし、アドレスを保存され、ネストされたリストを、メモリ内の同じで指されます。

old = [1,[1,2,3],3]
new = old.copy()

new[0] = 3
new[1][0] =3

'''
---------------------
Before:
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After:
[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
---------------------
'''

 

2.リスト式

新しいリストは、式メソッドのリストの浅いコピーを使用して生成されたディープコピーを達成するために第1層のみを

old = [1,[1,2,3],3]
new = [i for i in old]

new[0] = 3
new[1][0] = 3

'''
----------------------
Before
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After
[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
----------------------
'''

 

通じ3.forループ

ループのために新しい要素を一つのリスト1を反復処理。この方法は、さらに深いコピーを達成するために、第1層のみの浅いコピーです。

old = [1,[1,2,3],3]
new = []
for i in range(len(old)):
    new.append(old[i])

new[0] = 3
new[1][0] = 3

'''
-----------------------
Before:
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After:
[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
-----------------------
'''

 

4.ミクロトーム

使用して[:]スライスは、リスト全体は浅いコピー、深いコピーを達成するために同じ、唯一の最初の層であってもよいです。

old = [1,[1,2,3],3]
new = old[:]

new[0] = 3
new[1][0] = 3

'''
------------------
Before:
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After:
[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
------------------
'''

 

ディープコピー:

もしdeepcopy()メソッドは、関係なく、どのように多くの層の、新しいリストを形成し、すべてのオリジナルの独立を得るものに関係なく、これは最も効果的な方法の最も安全で爽やかです。

インポートコピーする必要があります

import copy
old = [1,[1,2,3],3]
new = copy.deepcopy(old)

new[0] = 3
new[1][0] = 3

'''
-----------------------
Before:
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After:
[1, [1, 2, 3], 3]
[3, [3, 2, 3], 3]
-----------------------
'''

 

公開された163元の記事 ウォン称賛14 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_24502469/article/details/104185122