考虑:
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在回路中的副本?
它表现得好像是一个副本(或者也许是一个不可变的东西,但是我希望会抛出一个错误...)
注意:我可以通过列表理解获得正确的行为.我很好奇上述行为的原因.
arg在循环中是副本吗?
是的,它包含参考的副本.
重新分配时,arg您不是在修改原始数组,也不是修改其中的字符串(字符串是不可变的).您只修改局部变量arg指向的内容.
Before assignment After assignment
args arg args arg
| | | |
| | | |
(array) / (array) 'sdfkj'
|[0] / |[0]
\ / |
\ / |
'-sdfkj' '-sdfkj'
Run Code Online (Sandbox Code Playgroud)