2016-07-06 4 views
-2

Wenn ich den folgenden Code ausgeführt habe, bekam ich den Wert A. Wenn ich es erneut ausführte, bekam ich den Wert B. Warum ist das? Hätte es nicht zum selben Ergebnis führen sollen?Position der Objekte - Python

-Code

list_a = ['one_A', 'two_A', 'three_A'] 

#initialize the list 
new_li = map(lambda i: '{0}\n'.format(i), list_a) 

print(new_li) 

Wert A

<map object at 0x00000000093E7E80> 

Wert B

<map object at 0x0000000009423080> 

Hinweis

Ich frage nicht, wie man ein Kartenobjekt in eine Liste verwandelt. Sondern warum Speicherplätze unterschiedlich sind, wenn das Kartenobjekt new_li neu erstellt wird.

+6

Warum würden sie gleich sein? – melpomene

Antwort

2

Wenn Sie in Python eine Variable einem Wert zuweisen, speichert sie den Wert an einem Speicherort und erstellt dann einen Verweis auf dieses Objekt. Daher ist Ihre Variable nur eine Referenz. Wenn Sie also der Variablen einen neuen Wert zuweisen, überschreibt sie diesen Speicherort nicht mit dem neuen Wert, sondern erstellt ein neues Objekt an einem neuen Speicherort und einen neuen Verweis auf diesen Speicherort.

Siehe unten für ein Beispiel. In diesem Fall wird die Liste [1,2] in der Speicherstelle 46777352 gespeichert, wenn a erzeugt wird. Wenn b erzeugt wird, wird es in der Speicherstelle 46797512 gespeichert. Obwohl sie denselben Wert haben, ist a nicht b, da sie sich nicht auf den gleichen Speicherort beziehen. Wenn a den Wert von [1,2,3] neu zugewiesen wird, ändert es nicht den Wert in Speicherplatz 46777352, sondern erstellt ein neues Objekt in Speicherort 46812296. Variable b behält seinen ursprünglichen Speicherort, obwohl es war erstellt nach Variable a.

Beispiel

Example

Weitere Lesen

Hier sind einige gute Videos von PyCon 2015 und 2016, die das Konzept zu erklären.

Fakten und Mythen über Python - PyCon 2015

https://www.youtube.com/watch?v=_AEJHKGk9ns&feature=youtu.be

Python durch Eint - PyCon 2016

https://www.youtube.com/watch?v=9k5687mmnoc