Yug*_*dle 5 python reference pass-by-reference pass-by-value
我对Python引用感到困惑.请考虑以下示例:
我的任务:编辑列表中的每个元素
d = { 'm': [1,2,3] }
m = d['m']
m = m[1:] # m changes its reference to the new sliced list, edits m but not d (I wanted to change d)
Run Code Online (Sandbox Code Playgroud)
同理:
d = { 'm': [1,2,3] }
m = d['m']
m = m[0] # As per python referencing, m should be pointing to d['m'] and should have edited d
Run Code Online (Sandbox Code Playgroud)
在python中,一切都是通过引用,然后何时创建一个新对象?我们是否始终需要copy
并deepcopy
从copy
模块制作对象副本?
请澄清.
Eth*_*man 12
在Python中,变量不是包含东西的框,而是指向对象的名称.在你的代码中:
d = { 'm': [1,2,3] }
- >将名称绑定d
到字典m = d['m']
- >将名称绑定m
到列表m = m[1:]
- >将名称绑定m
到另一个列表你的第三条线并没有改变m
自己,而是m
指向了什么.
要编辑列表中的元素,您可以执行以下操作:
m = d['m']
for i, item in enumerate(m):
result = do_something_with(item)
m[i] = result
Run Code Online (Sandbox Code Playgroud)
Ethan Furman在解释Python内部工作原理方面表现出色,我不再重复了.
由于m
确实代表字典中的列表,因此您可以对其进行修改.你无法将它重新分配给新的东西,这就是当你用=
它将它等同于一个新的切片时会发生的事情.
要切掉列表的第一个元素,例如:
>>> m[0:1] = []
>>> d
{'m': [2, 3]}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3011 次 |
最近记录: |