Python 可变列表
Python List mutable
我正在尝试使用 Python 术语来解释为什么会发生以下情况,有人可以解释为什么 tmp
变成 [[1,2,3]]
而不是 [[1,2]]
吗?
arr = []
tmp = [1,2]
arr.append(tmp)
print arr # [[1,2]]
tmp.append(3)
print arr # [[1,2,3]]
所有评论都很棒。
arr.append(tmp)
print arr # [[1,2]]
如您所见,结果不是:
print arr # [1,2]
所以,arr
只是保存对 tmp
数组的引用。如果我猜你正在寻找:
arr.extend(tmp)
print arr # [1,2]
更多关于 difference between append
vs. extend
list methods in python
arr = []
是一个空列表,当您通过以下方式将 tmp
附加到它时:
tmp = [1, 2]
arr.append(tmp)
您将 tmp
放入 arr
列表中,从而得到 arr = [tmp]
,可以扩展为 arr = [[1,2]]
。但这里巧妙的是,您通过 temp
变量维护对列表 [1,2]
的引用。因此,当您追加 temp
时,您追加的是 arr
中的相同列表。
进一步说明一下,仅仅因为您将 tmp
附加到 arr
并不意味着结果列表 [[1,2]]
将成为内存中的一个连续块.您将拥有 arr
列表,arr
的第一个元素将是指向列表 tmp
.
的指针
那是因为tmp
和arr[0]
都指向同一个对象。
只需在此处逐步查看:
http://www.pythontutor.com/visualize.html
First print statement
Second print statement
您可以使用 id
内置
手动检查
>>> arr = []
>>> tmp = [1,2]
>>> arr.append(tmp)
>>> id(tmp)
4404123192
>>> id(arr[0])
4404123192
>>> assert id(tmp) == id(arr[0])
>>> tmp.append(3) # allocate more memory (if needs) and add '3' to object (list) with id 4404123192
>>> id(tmp)
4404123192
>>> id(arr[0])
4404123192
>>> print arr
[[1, 2, 3]]
我正在尝试使用 Python 术语来解释为什么会发生以下情况,有人可以解释为什么 tmp
变成 [[1,2,3]]
而不是 [[1,2]]
吗?
arr = []
tmp = [1,2]
arr.append(tmp)
print arr # [[1,2]]
tmp.append(3)
print arr # [[1,2,3]]
所有评论都很棒。
arr.append(tmp)
print arr # [[1,2]]
如您所见,结果不是:
print arr # [1,2]
所以,arr
只是保存对 tmp
数组的引用。如果我猜你正在寻找:
arr.extend(tmp)
print arr # [1,2]
更多关于 difference between append
vs. extend
list methods in python
arr = []
是一个空列表,当您通过以下方式将 tmp
附加到它时:
tmp = [1, 2]
arr.append(tmp)
您将 tmp
放入 arr
列表中,从而得到 arr = [tmp]
,可以扩展为 arr = [[1,2]]
。但这里巧妙的是,您通过 temp
变量维护对列表 [1,2]
的引用。因此,当您追加 temp
时,您追加的是 arr
中的相同列表。
进一步说明一下,仅仅因为您将 tmp
附加到 arr
并不意味着结果列表 [[1,2]]
将成为内存中的一个连续块.您将拥有 arr
列表,arr
的第一个元素将是指向列表 tmp
.
那是因为tmp
和arr[0]
都指向同一个对象。
只需在此处逐步查看:
http://www.pythontutor.com/visualize.html
First print statement Second print statement
您可以使用 id
内置
>>> arr = []
>>> tmp = [1,2]
>>> arr.append(tmp)
>>> id(tmp)
4404123192
>>> id(arr[0])
4404123192
>>> assert id(tmp) == id(arr[0])
>>> tmp.append(3) # allocate more memory (if needs) and add '3' to object (list) with id 4404123192
>>> id(tmp)
4404123192
>>> id(arr[0])
4404123192
>>> print arr
[[1, 2, 3]]