Maison développement back-end Tutoriel Python Compréhension approfondie du module de copie en python (copie superficielle et copie profonde)

Compréhension approfondie du module de copie en python (copie superficielle et copie profonde)

Mar 28, 2017 pm 05:16 PM

Présente principalement le module de copie en python.

Le module de copie comprend des fonctions permettant de créer des copies profondes et superficielles d'objets composés, notamment des listes, des tuples, des dictionnaires et des instances d'objets définis par l'utilisateur.

########

copy(x)

########

Créez un nouvel objet composite et Crée une copie superficielle de x en copiant ses membres par référence. Pour le dire plus profondément,

copie l'objet, mais utilise toujours des références pour les éléments de l'objet.

Pour les types intégrés, cette fonction n'est pas souvent utilisée.

Utilisez plutôt des méthodes d'appel telles que list(x), dict(x), set(x), etc. pour créer une copie superficielle de x. Vous devez savoir que

en utilisant directement. le nom du type est évidemment meilleur que l'utilisation de copy() est beaucoup plus rapide. Mais ils obtiennent le même effet.

Un autre point concerne les objets qui ne peuvent pas être modifiés (chaîne, nombre, tuple), car vous n'avez pas à vous soucier de les modifier. Copier ou non n'a aucun

sens.

Autre point, vous pouvez utiliser l'opérateur is pour déterminer si les objets sont copiés.

a est b -> Vrai a et b font référence au même objet, pas à des copies

- -> Faux a et b sont des copies l'un de l'autre

Par exemple , comme suit Exemple, par exemple :

(1)

>>> a = [1,2,3]

>>> = copier .copy(a)

>>> b

[1, 2, 3]

>>> )

>>>a

[1, 2, 3, 4]

>>> , 2 , 3]

>>> a est b

Faux

(2)

>>> [1 ,2,3]

>>> b = a

>>> >

>>> a.append(4)

>>> a

[1, 2, 3, 4]

>>> b

[1, 2, 3, 4]

>>> > a, b

([1, 2, 3, 4, 6], [1, 2, 3, 4, 6])

(3)

> ;>> a = [1,2,3]

>>> b = liste(a)

>>> [1, 2, 3]

>>> a.append(4)

>>> 2, 3, 4]

>>>b

[1, 2, 3]

>>> (4 )

>>> a = [[1], ['a'], ['A']]

>>> copier( a)

>>> imprimer a, b

[[1], ['a'], ['A']] [[1], [' a' ], ['A']]

>>> b[1].append('b')

>>> 🎜> [[1], ['a', 'b'], ['A']]

>>> a

[[1], ['a ', 'b'], ['A']]

>>> b.append([100,101])

>>> 🎜> [[1], ['a', 'b'], ['A'], [100, 101]]

>>> 1] , ['a', 'b'], ['A']]

Dans l'exemple (3), nous pouvons voir l'objet de copie superficielle b de a. Ce sont des objets différents, donc pour. l'objet Les changements de

ne s'affecteront pas, mais les éléments de ces objets a et b font référence au même, donc si a ou b change les éléments de son objet, cela affectera

La valeur d'un autre.

Si vous souhaitez copier complètement un objet et les valeurs de tous les éléments d'un objet, utilisez uniquement la fonction deepcopy() ci-dessous.

######################

deepcopy(x[, visite])

# # #####################

Crée une copie complète de x en créant un nouvel objet composite et en copiant à plusieurs reprises tous les membres de x.

visit est un dictionnaire facultatif dont le but est de garder une trace des objets visités, détectant et évitant ainsi les cycles répétés dans les structures de données définissant

.

Bien que cela ne soit généralement pas nécessaire, la classe

peut implémenter des méthodes de copie personnalisées en implémentant les méthodes __copy__(self) et __deepcopy__(self, visit). opérations de copie profonde respectivement.

La méthode __deepcopy__() doit utiliser la visite du dictionnaire, qui est utilisée pour suivre les objets précédemment rencontrés pendant le processus de copie. Pour la méthode

__deepcopy__(),

n'a pas besoin d'effectuer d'opérations supplémentaires autres que de transmettre la visite aux autres méthodes deepcopy() incluses dans l'implémentation (le cas échéant).

Si la classe implémente les méthodes __getstate__() et __setstate__() utilisées par le module pickle, alors le module de copie utilisera

ces méthodes pour créer une copie.

, mais en implémentant les méthodes __copy__(self) et __deepcopy__(self, visit), la classe

peut implémenter des méthodes de copie personnalisées. Ces deux méthodes implémentent respectivement des opérations de copie superficielle et de copie profonde. .

La méthode __deepcopy__() doit utiliser la visite du dictionnaire, qui est utilisée pour suivre les objets précédemment rencontrés pendant le processus de copie. Pour la méthode

__deepcopy__(),

n'a pas besoin d'effectuer d'autres opérations en plus de passer la visite aux autres méthodes deepcopy() incluses dans l'implémentation (le cas échéant).

Si la classe implémente les méthodes __getstate__() et __setstate__() utilisées par le module pickle, alors le module de copie utilisera

ces méthodes pour créer une copie. , mais en implémentant les méthodes __copy__(self) et __deepcopy__(self, visit), la classe

peut implémenter une méthode de copie personnalisée. Ces deux méthodes implémentent respectivement des opérations de copie superficielle et de copie profonde.

La méthode __deepcopy__() doit utiliser la visite du dictionnaire, qui est utilisée pour suivre les objets précédemment rencontrés pendant le processus de copie. Pour la méthode

__deepcopy__(),

n'a pas besoin d'effectuer d'autres opérations en plus de passer la visite aux autres méthodes deepcopy() incluses dans l'implémentation (le cas échéant).

Si la classe implémente les méthodes __getstate__() et __setstate__() utilisées par le module pickle, alors le module de copie utilisera

ces méthodes pour créer des copies.

par exemple :

>>> a = [[1], ['a'], ['A']]

>>> ; importer une copie

>>> b = copy.deepcopy(a)

>>> '], ['A']]

>>> c = copy.copy(a)

>>> 1], ['a'], ['A']]

>>> a[1].append('b')

>>> une

[[1], ['a', 'b'], ['A']]

>>> ], ['a'], ['A']]

>>> c

[[1], ['a', 'b'], [' A']]

Il convient de noter que :

(1) Le module de copie est utilisé pour les types simples comme les entiers et les chaînes, mais cela est rarement nécessaire.

(2) Ces fonctions de copie ne peuvent pas fonctionner avec des modules, des objets de classe, des fonctions, des méthodes, des traces, des cadres de pile, des fichiers, des sockets et d'autres types similaires.

Si l'objet ne peut pas être copié, une exception copy.error sera levée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Apr 01, 2025 pm 05:09 PM

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Apr 01, 2025 pm 11:15 PM

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Quelles sont les bibliothèques Python populaires et leurs utilisations? Quelles sont les bibliothèques Python populaires et leurs utilisations? Mar 21, 2025 pm 06:46 PM

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H

Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Apr 01, 2025 pm 10:51 PM

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Que sont les expressions régulières? Que sont les expressions régulières? Mar 20, 2025 pm 06:25 PM

Les expressions régulières sont des outils puissants pour la correspondance des motifs et la manipulation du texte dans la programmation, améliorant l'efficacité du traitement de texte sur diverses applications.

Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Apr 01, 2025 pm 11:18 PM

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

Expliquez le but des environnements virtuels dans Python. Expliquez le but des environnements virtuels dans Python. Mar 19, 2025 pm 02:27 PM

L'article traite du rôle des environnements virtuels dans Python, en se concentrant sur la gestion des dépendances du projet et l'évitement des conflits. Il détaille leur création, leur activation et leurs avantages pour améliorer la gestion de projet et réduire les problèmes de dépendance.

See all articles