Affectation directe, copie superficielle et copie profonde

  • 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
  1. b = a: référence d'affectation, a et b pointent vers le même objet.
    Insérez la description de l'image ici
  2. 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).
    Insérez la description de l'image ici
    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.
    Insérez la description de l'image ici

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_36783816/article/details/112866480
conseillé
Classement