让我们举个例子
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”中的值?”
在 Python 中,当你将一个列表赋值给另一个变量时,这两个变量实际上指向同一个列表对象。因此,对其中一个变量进行修改会影响到另一个变量。
要实现你所说的“通过值传递”,你需要创建列表的副本。可以通过几种方法来创建副本,以确保修改副本不会影响原始列表:
a = ['help', 'copyright', 'credits', 'license'] b = a[:] b.append('XYZ') print(b) # ['help', 'copyright', 'credits', 'license', 'XYZ'] print(a) # ['help', 'copyright', 'credits', 'license']
list()
a = ['help', 'copyright', 'credits', 'license'] b = list(a) b.append('XYZ') print(b) # ['help', 'copyright', 'credits', 'license', 'XYZ'] print(a) # ['help', 'copyright', 'credits', 'license']
copy()
a = ['help', 'copyright', 'credits', 'license'] b = a.copy() b.append('XYZ') print(b) # ['help', 'copyright', 'credits', 'license', 'XYZ'] print(a) # ['help', 'copyright', 'credits', 'license']
copy
import copy a = ['help', 'copyright', 'credits', 'license'] b = copy.copy(a) b.append('XYZ') print(b) # ['help', 'copyright', 'credits', 'license', 'XYZ'] print(a) # ['help', 'copyright', 'credits', 'license']
如果你的列表包含可变对象(例如,列表的列表),并且你希望避免任何对嵌套对象的更改,那么你应该使用深复制:
copy.deepcopy()
import copy a = [['help'], ['copyright'], ['credits'], ['license']] b = copy.deepcopy(a) b[0].append('XYZ') print(b) # [['help', 'XYZ'], ['copyright'], ['credits'], ['license']] print(a) # [['help'], ['copyright'], ['credits'], ['license']]
根据你的需求选择合适的方法,如果只需要对列表进行浅复制,前三种方法就足够了。如果需要对包含可变对象的列表进行深复制,使用 copy.deepcopy() 是最好的选择。