可能重复:
What is the difference between list and list[:] in python?
我是python中的新手,所以我碰到了一个我无法找到对以下问题的回复的情况。
这在python中意味着什么?
l[:] = process_list(l)
l
的类型为list
基本上我有一个全局声明的列表,我想根据process_list方法的响应修改它(用新的值覆盖旧值)。当我这样做时:
l = process_list(l)
我明白了:Unresolved reference 'l'
您能解释一下有什么不同吗?我目前使用的第一种方法是不是很好?
答案 0 :(得分:4)
在函数中,对可能是局部变量的名称的赋值会按该名称创建局部变量,即使它影响全局:
a = None
def foo():
a = 5 # local 'a' shadows global 'a'
切片分配是修改,而不是赋值,因此名称继续引用全局:
a = [1, 2, 3]
def foo():
a[:] = [5] # modifies global 'a'
发生Unresolved reference
是因为通过创建一个遮蔽全局的局部变量,无法再看到全局变量。另一种做你想做的事情的方法是使用global
:
a = None
def foo():
global a
a = 5 # rebinds global 'a'
答案 1 :(得分:2)
list[:] = whatever
将更改现有列表的内容
(而不是用list = whatever
替换它)......顺便说一下list
是一个可怕的变量名......