>>> l = []
>>> id(l)
13043192
>>> l += [3]
>>> id(l)
13043192
>>> l = l + [3]
>>> id(l)
13059216
不用太纠结,直接看内存地址就一目了然。
id是python内置函数,what's id? ...
《'id' is a bad variable name in Python》
id() is a fundamental built-in:
Help on built-in function id in module builtin:
id(...)
id(object) -> integer
Return the identity of an object. This is guaranteed to be unique among
simultaneously existing objects. (Hint: it's the object's memory
address.)
很明显,就像2楼所说。
代码1 l2 = l1,l2 += [4],操作的都是l1,类似指针,引用神马的,理解不了就这么想就可以了。
代码2 l2 = l1,l2 = l2 + [4],这很明显是对l2进行重新赋值。你可以这样写l3 = l2 + [4],l2 += [4]。然后就知道结果了。
python的深拷贝和浅拷贝,可以了解一下
2楼stackoverflow里面有一个很不错的答案,直接用id()看内存地址
不用太纠结,直接看内存地址就一目了然。
id是python内置函数,what's id? ...
《'id' is a bad variable name in Python》
id() is a fundamental built-in:
Help on built-in function id in module builtin:
能想到的就是某些类实现了
__iadd__且跟__add__行为不一样,list 的+=就是一个例子,普通+会返回一个新的 list 实例,而+=是直接操作 list 本身。如果能确定
i、x就是两个数,说i += x会出问题那就是有些吹毛求疵、教条主义了。主要看i ,如果i是表达式
i+=x 中i 只计算一次
i = i+x i要计算2次
那么,如果i表达式中有修改变量, i = i+x 中两个i的值可能是不同的
这个例子在各种语法书里应该比较常见
以上是针对引用类型的,值类型应该是没有区别的吧。
核心问题就是要防止副作用。让代码的行为一致。
4楼说的太对了,两个不同文件的MD5值还有几率相同呢,问题是你碰见过么。