python按值列出,而不按引用列出
让我们举个例子
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[:]
-
要复制列表,可以使用
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
>>> 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]] >>>