Python - =和.extend for循环中的差异

Pho*_*nix 1 python for-loop extend python-3.x

参见示例,为什么=和.extend之间存在这种差异:

d1=[1,2,3]
d2=[7,8,9]
d={1:d1,2:d2}

for key,value in d.items():
    value=['a','b','c']
Run Code Online (Sandbox Code Playgroud)

输出:{1: [1, 2, 3], 2: [7, 8, 9]}

for key,value in d.items():
    value.extend(['a','b','c'])
Run Code Online (Sandbox Code Playgroud)

输出:{1: [1, 2, 3, 'a', 'b', 'c'], 2: [7, 8, 9, 'a', 'b', 'c']}

.extend似乎具有写入功能=不.我想深入研究为什么这是令人高兴的.

Mar*_*ers 9

您的第一个示例重新绑定 value到新的列表对象.因为value不再与字典值相关联,所以字典值完全不受影响.

第二个示例显式调用列表对象上的一个方法,该方法就地修改了对象.

Python名称仅仅是对实际对象的引用,如字典,列表,属性等.如果您将名称指向别的东西(将它们绑定到另一个对象),那么绑定的前一个对象发生的所有事情都是引用计数减1.这可能导致对象从内存中清除,但不会更改对象的值.

但是在对象上调用一个方法(例如value.extend()),那么该方法可能会影响对象.由于list对象是可变的,因此您会看到更改反映在引用该对象的任何位置.