python循环和字符串的语义

Pau*_*han 2 python semantics

考虑:

args = ['-sdfkj']
print args
for arg in args:
    print arg.replace("-", '')
    arg = arg.replace("-", '')
print args
Run Code Online (Sandbox Code Playgroud)

这会产生:

['-sdfkj']
sdfkj
['-sdfkj']
Run Code Online (Sandbox Code Playgroud)

在我预期的地方['sdfkj'].

arg在回路中的副本?

它表现得好像是一个副本(或者也许是一个不可变的东西,但是我希望会抛出一个错误...)

注意:我可以通过列表理解获得正确的行为.我很好奇上述行为的原因.

Mar*_*ers 8

arg在循环中是副本吗?

是的,它包含参考的副本.

重新分配时,arg您不是在修改原始数组,也不是修改其中的字符串(字符串是不可变的).您只修改局部变量arg指向的内容.

Before assignment         After assignment

args          arg          args          arg
  |            |            |            |
  |            |            |            |
(array)        /          (array)       'sdfkj'
  |[0]        /             |[0]        
   \         /              |
    \       /               |
     '-sdfkj'            '-sdfkj'
Run Code Online (Sandbox Code Playgroud)