2016-07-06 56 views
-2

當我執行下面的代碼時,我得到了值A.當我再次執行它時,我得到了值B.爲什麼是這樣。它不應該產生相同的結果嗎?對象的位置 - Python

代碼

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) 

值一個

<map object at 0x00000000093E7E80> 

B值

<map object at 0x0000000009423080> 

注意

我不問如何將地圖對象變成列表。但是,當地圖對象new_li重新創建時,爲什麼內存位置不同。

+6

他們爲什麼會是一樣的嗎? – melpomene

回答

2

在python中,當您將一個變量賦值給一個值時,它將該值存儲在一個內存位置,然後創建對該對象的引用。因此,你的變量只是一個參考。因此,如果爲變量指定新值,它不會用新值覆蓋該內存位置,而是在新的內存位置創建一個新對象,併爲該內存位置創建一個新的引用。

查看下面的示例。在這種情況下,創建a時將列表[1,2]存儲在內存位置46777352中。當創建b時,它將存儲在內存位置46797512中。即使它們具有相同的值,a也不是b,因爲它們不指向相同的內存位置。當a被重新賦值爲[1,2,3]時,它不會更改內存位置46777352中的值,而是會在內存位置46812296中創建一個新對象。變量b保留原始內存位置,即使它是在變量a之後創建。

Example

進一步閱讀

下面是從2015年PYCON和2016年一些好的視頻其解釋的概念。

事實和有關Python神話 - 2015年PYCON

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

Python的用浸漬 - PYCON 2016

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