直接割り当て:
もし=直接割り当て、非コピー方法。
これら二つのリストは等価で、リストを変更し、他のリストのいずれかに影響します。
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]
-----------------------
'''