【发布时间】:2019-04-28 16:03:21
【问题描述】:
我真的很感兴趣 Python 内存分配的工作原理。
我写了两段代码:
1.
list = []
a = [1,2,3]
list.append(a)
a = [3,2,1]
print(list)
print(a)
2.
def change(list):
list[1] = 50
list[2] = 70
list = []
a = [1,2,3]
list.append(a)
change(a)
print(list)
print(a)
当我编译第一个代码时,我得到结果 [[1,2,3]] 和 [3,2,1]。
但是,当我编译第二个代码时,我得到的结果是 [1,50,70]。
在第一种情况下,我创建了一个对象“a”和一个数组“list”。当我将对象“a”附加到数组时,数组实际上指向它。然后,当我分配“a”新数组 [3,2,1] 时,对象 [1,2,3] 保存在数组中,“a”指向新数组 [3,2,1]。
在第二种情况下,我还创建了一个对象“a”和一个数组“list”。我将“a”附加到数组,还有一个指向“a”的指针。然后我在数组“a”上调用一个方法。调用函数并更改元素的值后,数组“list”仍然指向对象“a”,而不创建新实例。
有人能解释一下它的真正工作原理吗?
【问题讨论】:
-
内存分配真的不是你现在应该考虑的问题。首先阅读how variables and objects interact。内存分配是一个实现细节。
-
你能澄清一下你到底不明白什么吗?如果我理解正确,您已经描述了它是如何工作的。
-
那些不是数组,它们是
list对象。但无论如何,请阅读以下内容:nedbatchelder.com/text/names.html