Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象的位置-Python_Python_Python 2.7_Python 3.x_Oop_Memory Management - Fatal编程技术网

对象的位置-Python

对象的位置-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

当我执行下面的代码时,我得到了值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>

注意

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


为什么它们是一样的?