Maison > Article > développement back-end > Introduction détaillée au passage de variables Python
code
num_1 = 123 num_2 = num_1 # 改变num_2值前 print 'num_1 = {0}, num_2 = {1}'.format(num_1, num_2) num_2 = 0 # 改变num_2值后 print 'num_1 = {0}, num_2 = {1}'.format(num_1, num_2)
Sortie
num_1 = 123, num_2 = 123 num_1 = 123, num_2 = 0
Conclusion
Les variables numériques sont transmises par valeur.
Code
str_1 = 'hello python' str_2 = str_1 # 改变str_2值前 print 'str_1 = {0}, str_2 = {1}'.format(str_1, str_2) str_2 = 'hello' # 改变str_2值后 print 'str_1 = {0}, str_2 = {1}'.format(str_1, str_2)
Sortie
str_1 = hello python, str_2 = hello python str_1 = hello python, str_2 = hello
Conclusion
Les variables de chaîne sont également transmises par valeur.
Code
l_1 = [1, 2, 3, 4] l_2 = l_1 print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2) l_2[0] = 100 # 改变l_2的第一个元素 print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2) l_2 = [1,1,1] # 改变l_2的全部元素 print 'l_1 = {0}, l_2 = {1}'.format(l_1, l_2)
Sortie
l_1 = [1, 2, 3, 4], l_2 = [1, 2, 3, 4] l_1 = [100, 2, 3, 4], l_2 = [100, 2, 3, 4] l_1 = [100, 2, 3, 4], l_2 = [1, 1, 1]
Conclusion
Comme vous pouvez le voir sur la sortie ci-dessus, l_1 et l_2 fonctionnent de manière similaire aux pointeurs en c/c, l_2 = l_1 est équivalent à l_2 et l_1 pointant vers la même mémoire, et le contenu est [1, 2, 3, 4]. Lorsque l_2[0] = 100, le premier élément de l_1 est également modifié. l_2 = [1,1,1] fait pointer l_2 vers un autre morceau de mémoire, ce qui n'affectera pas le contenu de l_1.
Code
d_1 = {'a': 1, 'b': 2, 'c': 3} d_2 = d_1 print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2) d_2['c'] = 10 print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2) d_2 = {'e': 12, 'f': 15} print 'd_1 = {0}, d_2 = {1}'.format(d_1, d_2)
Sortie
d_1 = {'a': 1, 'c': 3, 'b': 2}, d_2 = {'a': 1, 'c': 3, 'b': 2} d_1 = {'a': 1, 'c': 10, 'b': 2}, d_2 = {'a': 1, 'c': 10, 'b': 2} d_1 = {'a': 1, 'c': 10, 'b': 2}, d_2 = {'e': 12, 'f': 15}
Conclusion
Les résultats de sortie montrent que dict et list ont les mêmes propriétés. L'affectation directe est similaire à la référence dans. c Réussi.
Code
class Point: def init(self, x, y): self.x = x self.y = y def str(self): return ''.join(['x = ', str(self.x), ' ', 'y = ', str(self.y)]) p_1 = Point(12,34) p_2 = p_1 print 'p_1: {0}; p_2: {1}'.format(p_1, p_2) p_2.x = 122 print 'p_1: {0}; p_2: {1}'.format(p_1, p_2) p_2 = Point(89, 978) print 'p_1: {0}; p_2: {1}'.format(p_1, p_2)
Sortie
p_1: x = 12 y = 34; p_2: x = 12 y = 34 p_1: x = 122 y = 34; p_2: x = 122 y = 34 p_1: x = 122 y = 34; p_2: x = 89 y = 978
Conclusion
Les objets personnalisés sont également transmis par référence lors du processus d'affectation.
En Python, les valeurs numériques et les chaînes sont transmises par valeur pendant le processus d'affectation ; la liste, le dict et les objets sont transmis par référence par défaut pendant le processus d'affectation. devez passer par valeur, vous pouvez utiliser les fonctions copy et deepcopy sous le module copy.
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!