对象的位置-Python
当我执行下面的代码时,我得到了值A。当我再次执行它时,我得到了值B。这是为什么。它不应该产生同样的结果吗 代码对象的位置-Python,python,python-2.7,python-3.x,oop,memory-management,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
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>
注意
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)
我不是问如何将贴图对象转换为列表。但是,当重新创建映射对象new_li时,为什么内存位置不同。在python中,当您将变量赋值时,它将值存储在内存位置,然后创建对该对象的引用。因此,您的变量只是一个引用。因此,如果为变量指定一个新值,它不会用新值覆盖该内存位置,而是在新内存位置中创建一个新对象和对该内存位置的新引用 请参见下面的示例。在这种情况下,列表[1,2]在创建时存储在存储器位置46777352中。创建b时,它存储在内存位置46797512中。即使它们具有相同的值,a也不是b,因为它们引用的内存位置不同。当重新分配[1,2,3]的值时,它不会更改内存位置46777352中的值,而是在内存位置46812296中创建一个新对象。变量b保留a的原始内存位置,即使它是在变量a之后创建的 示例
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)
进一步阅读
以下是pycon 2015年和2016年的一些优秀视频,解释了这一概念
关于Python的事实和神话–Pycon 2015
沉浸式Python–Pycon 2016
为什么它们是一样的?