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

大家讲道理
Libérer: 2017-05-28 09:56:40
original
1730 Les gens l'ont consulté

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
Copier après la connexion


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
Copier après la connexion


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)
Copier après la connexion



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]
Copier après la connexion
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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal