2

可能重复:
python 中的 list 和 list[:] 有什么区别?

我是 python 的新手,所以我遇到了无法找到以下问题的答案的情况。

这在python中意味着什么?

l[:] = process_list(l)

l是类型list

基本上我有一个全局声明列表,我想根据 process_list 方法的响应来修改它(用新值覆盖旧值)。当我这样尝试时:

l = process_list(l)

我明白了:Unresolved reference 'l'

你能解释一下有什么区别吗?如果我目前使用的第一种方法是一个好的方法?

4

2 回答 2

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'
于 2012-12-10T17:28:02.807 回答
2

list[:] = whatever 将更改现有列表的内容

(而不是将其替换为list = whatever)...顺便说一句,这list是一个可怕的变量名...

于 2012-12-10T17:26:44.033 回答