• Affectation directe :Il s'agit essentiellement d'une référence (alias) à l'objet.

  • Copie superficielle :Copie l'objet parent, mais ne copie pas les objets enfants internes de l'objet.

  • Copie profonde :La méthode deepcopy du module copy copie entièrement l'objet parent et ses objets enfants.

Exemple de copie superficielle de dictionnaire

Exemple

>>>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]})

La copie profonde nécessite d'importer le module copy :

Exemple

>>>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

1, b = a: Affectation par référence — a et b pointent tous les deux vers le même objet.

2、b = a.copy():Copie superficielle — a et b sont des objets indépendants, mais leurs objets enfants pointent toujours vers le même objet (ce sont des références).

b = copy.deepcopy(a):Copie profonde — a et b copient entièrement l'objet parent et ses objets enfants, et les deux sont complètement indépendants.

Plus d’exemples

Les exemples suivants utilisent copy.copy (copie superficielle) et copy.deepcopy (copie profonde) du module copy :

Exemple

#!/usr/bin/python # -*-coding:utf-8 -*- import copy a = [1, 2, 3, 4, ['a', 'b']] # Objet original b = a # Affectation, passe une référence à l'objet c = copy.copy(a) # Copie d'objet, copie superficielle d = copy.deepcopy(a) # Copie d'objet, copie profonde a.append(5) # Modification de l'objet a a[4].append('c') # Modification de l'objet tableau ['a', 'b'] dans l'objet a print( 'a = ', a ) print( 'b = ', b ) print( 'c = ', c ) print( 'd = ', d )

La sortie 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']])