python 代码可视化执行

http://www.pythontutor.com/visualize.html 网站提供了 Python、C、C++ 、Java、Ruby 等不同语言的执行可视化在线服务,对于理清或演示某些概念很有帮助。使用一个简单的示例来进行说明。

python 的 list 是一个容器,对 list 的赋值操作使得两个变量都指向同一个对象。比如下面的代码:

a = [1,2,3, ["Jan","Feb", "Mar"]]
b = a

a.append(4)
print (a)
print (b)

a 赋值给 b 后,对 b 的改变后, print (b) 的结果是什么?

在网站输入以上代码,点击 Visualize Execution 按钮,进入下面的界面:

image

在左边,红色箭头指向下一步要执行的代码,最下面显示一共有 5 步,目前在第 1 步。点击 Next 按钮:

image

创建一个 list 对象实例,同时在 global frame 中有一个变量 a 指向这个 list。list offset 为 3 的元素是另外一个 list,所以有另外一个参照的箭头。

点击 Next 按钮,执行 b = a:

image

现在 b 和 a 都指向 list 对象实例。

再点击 Next 按钮执行 print 语句,在 Output 区域输出了 a 的结果。

image

点击 Next 按钮,执行 print (b),可以看到 b 的输出和 a 一样,因为它们都指向同一个对象。

image

用可视化执行理解 python 的浅拷贝和深拷贝

将上述代码修改如下:

import copy

a = [1,2,3, ["Jan","Feb","Mar"]]
b = copy.copy(a)

a.append(4)
print (a)
print (b)

copy.copy() 方法执行对象的浅拷贝:浅拷贝针对包含其他对象的对象来说,对象本身拷贝,但对象包含的对象仍然是相同的引用(只拷贝最上层)。以上代码演示了浅拷贝。在可视化执行中显示如下:

执行了对 a 的赋值后界面如下:

image

执行了 浅拷贝的界面如下:

image

将代码改为深拷贝。深拷贝的意思是对象本身和对象所包含的对象全部会被拷贝。

import copy

a = [1,2,3, ["Jan","Feb","Mar"]]
b = copy.deepcopy(a)

a.append(4)
print (a)
print (b)

可视化化执行,可以看到对象、子对象全部被创建:

在这里插入图片描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,664评论 1 118
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,167评论 1 32
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,926评论 0 10
  • 娴的昆明 今年托湖南省人民政府的福,所有的公职人员按年假制度休假。去年因为特大洪灾,我的年假也泡汤,今年...
    Jace_0935阅读 378评论 1 2
  • 好吧,所以出完这张专辑跟全球巡演后BANE就彻底解散了。 BANE是陪伴着我长大的乐队之一,虽然他们出来混的时候我...
    有演出阅读 308评论 0 1