Python初学者在这里。阅读关于列表引用、浅拷贝和深拷贝的文章时,尝试了以下几点:
a = ['a', 'b', 'c']
b = list(a)
a[0] = 'A'
预期输出:
>>>a
['A', 'b', 'c']
>>>b
['A', 'b', 'c']
实际输出:
>>>a
['A', 'b', 'c']
>>>b
['a', 'b', 'c']
但是,它在以下情况下有效:
xs = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> ys = list(xs) # Make a shallow copy
xs[1][0] = 'X'
>>> xs
[[1, 2, 3], ['X', 5, 6], [7, 8, 9]]
>>> ys
[[1, 2, 3], ['X', 5, 6], [7, 8, 9]]
有人能解释一下我是不是遗漏了什么吗?谢谢
Python 3.7.4
发布于 2019-08-03 23:38:51
这是因为list()
函数生成了一个新列表,如果您在赋值之后对原始列表进行了更改,则新列表不会更改。
您可以使用变量值执行此操作,但要小心,例如
var = 'a'
list1 = [var, 'a', 'b']
list2 = list1
print(list1)
print(list2)
输出:
['a', 'a', 'b']
['a', 'a', 'b']
您可以更改var
的值,除非您执行以下操作,否则两个列表都将更改:
var = 'a'
list1 = [var, 'a', 'b']
var = 'c'
list2 = list1
print(list1)
print(list2)
输出:
['a', 'a', 'b']
['a', 'a', 'b']
为什么?因为当您执行此操作时,list1=[var, 'a', 'b']
var
的值为'a'
,但是当您更改其值时,这不会影响list1
,因为它保存了var
本身的值,因此list2
也不会
发布于 2019-08-03 23:07:22
list()
会创建一个新列表,这意味着对原始列表的更改不会影响新列表。
发布于 2019-08-03 23:13:06
当您说b = list(a)
时,您正在创建一个新的列表b
,它的值与a
中的值相同。在这一点上,每个列表的元素是相等的,但它们不是相同的对象。也就是说,其中一个对象的更改不会反映在另一个对象中。它们是独立的。
如果您说b = a
,则表示b
和a
是引用同一对象的名称。
https://stackoverflow.com/questions/57342656
复制相似问题