对象的位置 - Python

时间:2016-07-06 19:59:52

标签: python python-2.7 python-3.x oop memory-management

当我执行以下代码时,我得到了值A.当我再次执行它时,我得到了值B.为什么会这样。它不应该产生相同的结果吗?

代码

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)

价值A

<map object at 0x00000000093E7E80>

价值B

<map object at 0x0000000009423080>

注意

我不是在问如何将地图对象转换为列表。但是,当重新创建地图对象new_li时,为什么内存位置会有所不同。

1 个答案:

答案 0 :(得分:2)

在python中,当您将值赋给值时,它会将值存储在内存位置,然后创建对该对象的引用。因此,您的变量只是一个参考。因此,如果为变量分配新值,则不会使用新值覆盖该内存位置,而是在新内存位置创建新对象以及对该内存位置的新引用。

请参阅下面的示例。在这种情况下,当创建a时,列表[1,2]被存储在存储器位置46777352中。当创建b时,它存储在存储器位置46797512中。即使它们具有相同的值,a也不是b,因为它们不指向相同的存储器位置。当a重新赋值为[1,2,3]时,它不会更改内存位置46777352中的值,而是在内存位置46812296中创建一个新对象。变量b保留原始内存位置,即使它是在变量a之后创建。

示例

Example

进一步阅读

以下是来自pycon 2015和2016的一些好视频,它们解释了这个概念。

关于Python的事实和神话 - Pycon 2015

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

Python by Immersion - Pycon 2016

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