2016-07-06 55 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