2.5.1 再谈Python对象

Learning By Reading 难度:★ 重要性:★★★★★

  • 观察结果,思考原因。

a = [1, 2]
b = a
b += [3]
print(a)
  • 不知道为什么?看这里

Learning By Thinking 难度:★ 重要性:★★★★★

  • 观察结果,思考原因。

a = [1, 2]
b = a
b = b + [3]
print(a)
  • 将程序稍微改写一下或许大家就能看出原因来。b += [3]等价于b.__iadd__([3])

    b = b + [3]等价于b = b.__add__([3])

    __iadd__改变了对象b(也就改变了a),__add__创造了一个新的对象。

  • 试着用上文中画图的形式解释一下这段程序为什么会出现这样的结果。

Learning By Reading 难度:★ 重要性:★★★★★

  • 观察结果,思考原因。

a = 2
b = a
b += 1
print(a)
  • 又和想象的不一样?看这里

  • int对象没有__iadd__方法,在+=的时候,Python会先查看对象有没有__iadd__方法,

    没有的话,就改用__add__

Last updated