-
Avant - propos :…
-
table des matières
-
Affectation directe: il s'agit en fait d'une référence (alias) à un objet.
-
Copie superficielle (copie): Copiez l'objet parent sans copier les objets enfants à l'intérieur de l'objet.
-
Deep copy (deepcopy): La méthode deepcopy du module de copie copie complètement l'objet parent et ses enfants.
1 copie peu profonde
>>>a = {
1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({
1: [1, 2, 3]}, {
1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({
1: [1, 2, 3, 4]}, {
1: [1, 2, 3, 4]})
- Deep Copy doit introduire le module de copie:
>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({
1: [1, 2, 3, 4]}, {
1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({
1: [1, 2, 3, 4, 5]}, {
1: [1, 2, 3, 4]})
- Analyse
- b = a: référence d'affectation, a et b pointent vers le même objet.
- b = a.copy (): copie superficielle, a et b sont des objets indépendants, mais leurs objets enfants pointent toujours vers un objet unifié (référence).
b = copy.deepcopy (a): copie profonde, a et b copient complètement l'objet parent et ses enfants, et les deux sont complètement indépendants.
2 exemples
Les exemples suivants sont copy.copy (copie superficielle) et (copy.deepcopy) utilisant le module de copie:
#!/usr/bin/python
# -*-coding:utf-8 -*-
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )
La sortie d'exécution de l'exemple ci-dessus est:
('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])
('d = ', [1, 2, 3, 4, ['a', 'b']])