让我们举个例子
a=['help', 'copyright', 'credits', 'license'] b=a b.append('XYZ') b ['help', 'copyright', 'credits', 'license', 'XYZ'] a ['help', 'copyright', 'credits', 'license', 'XYZ']
我想在列表“ b”中附加值,但列表“ a”的值也已更改。 我想我不知道为什么会这样(python通过引用传递列表)。 我的问题是“如何通过值传递它,以使添加'b'不会更改'a'中的值?”
“ b”
“ a”
'b'
'a'
b = a[:]
要复制列表,可以使用list(a)或a[:]。在这两种情况下,都会创建一个新对象。 但是,这两种方法在可变对象的集合方面存在局限性,因为内部对象保持它们的引用完整无缺:
list(a)
a[:]
>>> a = [[1,2],[3],[4]] >>> b = a[:] >>> c = list(a) >>> c[0].append(9) >>> a [[1, 2, 9], [3], [4]] >>> c [[1, 2, 9], [3], [4]] >>> b [[1, 2, 9], [3], [4]] >>>
如果你想要对象的完整副本,则需要copy.deepcopy
copy.deepcopy
>>> from copy import deepcopy >>> a = [[1,2],[3],[4]] >>> b = a[:] >>> c = deepcopy(a) >>> c[0].append(9) >>> a [[1, 2], [3], [4]] >>> b [[1, 2], [3], [4]] >>> c [[1, 2, 9], [3], [4]] >>>