pythontutor.com是个神奇的网站,可以很直观的查看Python的原理变化过程。
www.pythontutor.com通过可视化代码执行来帮助您学习 Python、JavaScript、C、C++ 和 Java。《流畅的python》一书中多次使用该网站来可视化Python数据变化过程,具备的优点如下:
输入网站www.pythontutor.com直接进行登陆。
这里以《流畅的python》一书中2.6节为例,来进一步使用该可视化工具。
执行第一步:这时候创建“不可变类型”元组t,我们观察这个元组发现,该元组内部嵌套一个“可变类型”列表[30, 40]。
执行第二步:对元组t第三个元素进行修改时,出现“tuple object does not support item assignment”错误。此时元组t却发生了变化。
书中通过字节码的方式解释了该现象出现的原因:第一步,因为元组t的第三个元素指向的是一个可变类型的列表,因此t[2] + [30, 40]是能够完成。第二步,由于元组是不可变类型,当t[2] + [30, 40]计算结果对t[2]赋值时就会报错。整个过程是先完成第一步的列表扩充,再完成第二步的元组赋值,所以即便出现错误也还是会更改元组t。书上给的建议是:不要把可变对象放在元组里面。
参考文献:
[1] PROGRAMMING/PYTHON. Fluent Python.