Maison >développement back-end >Tutoriel Python >Affectation et copie Python
Cet article partagera avec vous un article pour vous aider à comprendre les connaissances sur l'affectation et la copie en python. Les amis intéressés devraient y jeter un œil ensemble
Variables et affectation
En Python, tout est un objet, et les objets sont référencés via des « noms de variables ». Les « noms de variables » sont plus précisément appelés « noms ». nous utilisons Le nom fait référence à une personne et le code fait référence à un objet à travers le nom. L'affectation de variable consiste à lier un nom à un objet. L'affectation ne copie pas l'objet. Tout comme nos parents nous donnent un nom à notre naissance, donner un surnom à quelqu'un ne crée pas une personne supplémentaire, cela crée simplement un nom supplémentaire. Il existe deux façons de comparer deux objets, à savoir : is et == is compare si deux objets sont identiques. Le fait qu'il s'agisse du même objet peut être identifié par la valeur ID de l'objet ==. compare Il s'agit de savoir si les valeursdes deux objets sont égales>>> x1 = [1,2] >>> x2 = [1,2] >>> x1 is x2 False >>> id(x1) 4338854088 >>> id(x2) 4338904392 >>> x1 == x2 TrueBien que les valeursde x1 et x2 soient les de même, ce sont deux objets indépendants et différents dans la mémoire, occupant des espaces mémoire différents, c'est comme deux pommes qui se ressemblent placées sur la table, mais qui sont en réalité deux objets différents.
>>> x3 = x2 >>> x3 is x2 True >>> id(x3) 4338904392Comme mentionné précédemment, l'affectation consiste à lier un nom à un objet. Ici, nous en lions simplement un nouveau à l'objet correspondant à x2. Le nom est x3, ce qui revient à mettre une pomme sur la table, en l'étiquetant initialement x2, puis en ajoutant ensuite une étiquette x3. C'est essentiellement la même pomme, donc x2 et x3 font référence à En fait, c'est le même objet. Lorsque l'objet est modifié via x2, x3 changera également car il s'agit essentiellement du même objet. C'est comme lorsque Zhang San et Xiao Zhang sont la même personne, ajoutant. Les vêtements de Zhang San ajoutent en fait des vêtements à Xiao Zhang.
>>> x2.append(3) >>> x2 [1, 2, 3] >>> x3 [1, 2, 3]Cependant, lorsque je réattribue une valeur à x2, cela signifie que x2 ne fait plus référence à l'objet précédent, mais fait référence au nouvel objet, et x3 fait toujours référence à l'objet précédent. Par exemple, une grosse pomme sur la table a deux étiquettes : x2 et x3. Réattribuer une valeur à x2 équivaut à attacher l'étiquette x2 à une autre pomme, mais x3 est toujours attaché à l'ancienne pomme.
>>> x2 = [3, 4] >>> x3 [1, 2, 3]
Copie d'objet
Parfois, en entreprise, nous devons copier un objet, mais nous ne voulons pas avoir d'effets secondaires sur l'objet d'origine. Cela ne peut pas être résolu en l'attribuant à une nouvelle variable (car l'affectation ne copie pas l'objet), donc Python spécifiquement. fournit un mécanisme de copie basé sur l'objet d'origine. Créez rapidement un objet contenant la même valeur. Cette fonctionnalité est fournie par le module de copie. La copie est divisée en copie superficielle et copie profonde.>>> s = [1,2,3]>>> sc = copy.copy(s) # 浅拷贝>>> sc[1, 2, 3] >>> sdc = copy.deepcopy(s) # 深拷贝 >>> sdc [1, 2, 3]Les objets copiés ont la même valeur mais sont en réalité des objets différents
>>> s == sc == sdc True >>> s is sc False >>> s is sdc FalseAlors, quelle est la différence entre une copie superficielle et une copie profonde ? Pour les objets immuables, tels que les entiers, les chaînes, les tuples et les objets de collection composés de ces objets immuables, il n'y a aucune différence entre la copie superficielle et la copie profonde. Ils copient tous les deux un nouvel objet. La différence entre les deux est que lors de la copie d'un objet combiné, tel qu'une liste dans une liste, ou un dictionnaire ou une liste dans un dictionnaire, la copie superficielle copie uniquement la coque externe et les éléments à l'intérieur ne sont pas copiés, tandis que la copie profonde copie fait une nouvelle copie du shell et des éléments à l'intérieur. Regardons un exemple :
>>> x = [2, 3] >>> y = [7, 11] >>> z = [x, y] >>> a = copy.copy(z) # 浅拷贝 >>> a[0] is z[0] TrueLa référence d'élément dans l'objet copié a est x et y Lorsque vous modifiez la valeur de x, a changera également.
>>> b = copy.deepcopy(z) # 深拷贝 >>> b[0] is z[0] FalsePour une copie approfondie, les éléments à l'intérieur sont également copiés à nouveau, et une copie est faite avec x Pour deux éléments de même valeur que y, modifier les valeurs de x et y n'affectera pas b Copiez la tranche de la liste z[:] ou appelez la méthode de copie list.copy() du objet. C’est une copie superficielle. Pour les objets personnalisés, nous pouvons également implémenter nous-mêmes la méthode __copy__ et la méthode __deepcopy__ Recommandations associées :
Analyse du rôle des virgules après les instructions d'affectation Python
Partage des méthodes d'opération d'affectation Python
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!