Maison  >  Article  >  développement back-end  >  Différences dans les paramètres de la fonction Python

Différences dans les paramètres de la fonction Python

大家讲道理
大家讲道理original
2017-05-28 09:56:401717parcourir

Dans le processus d'utilisation de python, j'ai découvert que lorsque le paramètre de fonction est list , appeler list.append() à l'intérieur de la fonction modifiera les paramètres formels, ce qui est différent de C/C++. Vérifiez les informations pertinentes et enregistrez-les ici

En python, l'identifiant peut obtenir l'adresse mémoire de

objet


>>> num1 = 10>>> num2 = num1>>> num3 = 10>>> id(num1)4299190320>>> id(num2)4299190320>>> id(num3)4299190320


Vous pouvez voir num1, num2, Les trois objets de num3 pointent vers une adresse. Python utilise une méthode appelée

référence comptage pour compléter cela, qui est très similaire au pointeur intelligent de C++zhong, variable. Attribuer une valeur à une variable équivaut à +1 le compteur de référence du même objet, plutôt que de réallouer de l'espace

Pour les objets liste, vous pouvez voir les résultats suivants :

.

<.>
>>> list1 = [,>>> list2 = [,>>> >>> 4302498128


list1 et list3 pointent vers le même espace, et list2 pointe vers une autre adresse

Le passage du paramètre de fonction en python est le passage d'un objet, et il y a aussi des problèmes locaux et globaux. , il y a deux règles dans le processus de transmission des paramètres :

    Copiez les paramètres dans l'objet dans la portée locale par référence, ce qui signifie que le les variables utilisées pour accéder aux paramètres de la fonction ne sont pas élevées vers la fonction. L'objet n'a rien à voir avec cela, car il y a un problème de copie, qui est le même que le
  • langage C

    Et la modification de l'objet local ne le fera pas. changer les données d'origine.Modifier les objets mutables.Les objets mutables sont principalement des listes et des dictionnaires. Cette position est essentiellement que la modification du sous-objet local analysé précédemment ne changera pas l'ID de l'objet dictionnaire ou de l'objet liste .


Les résultats sont les suivants :

def incrInt(num):
    pId(num)
    num += 1;
    pId(num)def incrList(listArg):
    pId(listArg)
    listArg.append(1);
    pId(listArg)def pId(arg):    print id(arg)
num1 = 10pId(num1)
incrInt(num1)print(num1)

list1 = [0,2]
pId(list1)
incrList(list1)print(list1)



Vous pouvez voir qu'à l'intérieur de la fonction, lorsque la valeur de int est modifiée, num pointe vers une autre adresse mémoire, et lorsque la liste est modifiée, elle est à la même adresse mémoire

En python, les objets peuvent être divisés en variables (mutables) et immuables (immuables) deux types, tuple, type numérique (nombre),
 python test.py42991819044299181904429918188010433697991243369799124336979912[0, 2, 1]
string

(
string

) sont tous les objets immuables et les mots Les objets Typique (dictionnaire) et liste (liste) sont des objets mutables, alors soyez prudent lorsque vous passez des paramètres.

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