python 中列表的可变性
Mutability of lists in python
示例一:改变已经附加到b的值改变了原始列表l中的值
>>> l = [1 , 2, 3]
>>> b = []
>>> b.append(l)
>>> b[0].append(4)
>>> b
[[1, 2, 3, 4]]
>>> l
[1, 2, 3, 4]
例2:在ans后面追加l1,然后修改l1的值。但是,ans中的值保持不变。
>>> l1 = [1, 2, 3]
>>> ans = []
>>> ans.append(l1)
>>> ans
[[1, 2, 3]]
>>> l1 = [2, 3, 4]
>>> ans
[[1, 2, 3]]
我似乎遗漏了一些关于列表可变性的基本要点。有人可以指出吗?
你没有变异 l1
。您正在将一个新对象分配给相同的名称,这使得该名称指向一个新对象。您正在移动标签,而不是修改对象。 l1
过去指向的列表的唯一剩余引用现在是 ans[0]
.
替换
>>> l1 = [2, 3, 4]
和
>>> l1[:] = [2, 3, 4]
这不会将新列表分配给 l1。
在你的第一个例子中,l
是一个指针,b
。
l
然后附加到 b,所以 b[0]
现在指的是指针。
接下来,您将 4 附加到 b[0]
,这与 l
相同,因此 4 将同时添加到 b[0]
和 l
.
在您的第二个示例中,ans
包含 l1
的指针,就像 b
包含 l
的指针一样
然后,您通过将 l1
分配给另一个数组来更改它本身,因此 l1
发生了更改,但 ans[0]
没有。
最大的收获是 append
只是改变了列表,而指针保持不变。但是,当您将变量设置为不同的列表时,指针会发生变化。
示例一:改变已经附加到b的值改变了原始列表l中的值
>>> l = [1 , 2, 3]
>>> b = []
>>> b.append(l)
>>> b[0].append(4)
>>> b
[[1, 2, 3, 4]]
>>> l
[1, 2, 3, 4]
例2:在ans后面追加l1,然后修改l1的值。但是,ans中的值保持不变。
>>> l1 = [1, 2, 3]
>>> ans = []
>>> ans.append(l1)
>>> ans
[[1, 2, 3]]
>>> l1 = [2, 3, 4]
>>> ans
[[1, 2, 3]]
我似乎遗漏了一些关于列表可变性的基本要点。有人可以指出吗?
你没有变异 l1
。您正在将一个新对象分配给相同的名称,这使得该名称指向一个新对象。您正在移动标签,而不是修改对象。 l1
过去指向的列表的唯一剩余引用现在是 ans[0]
.
替换
>>> l1 = [2, 3, 4]
和
>>> l1[:] = [2, 3, 4]
这不会将新列表分配给 l1。
在你的第一个例子中,l
是一个指针,b
。
l
然后附加到 b,所以 b[0]
现在指的是指针。
接下来,您将 4 附加到 b[0]
,这与 l
相同,因此 4 将同时添加到 b[0]
和 l
.
在您的第二个示例中,ans
包含 l1
的指针,就像 b
包含 l
然后,您通过将 l1
分配给另一个数组来更改它本身,因此 l1
发生了更改,但 ans[0]
没有。
最大的收获是 append
只是改变了列表,而指针保持不变。但是,当您将变量设置为不同的列表时,指针会发生变化。