Python代码可视化执行神器

大家好,我是玩哥。

在学习Python的时候,不知道有没有小伙伴好奇这一行行代码究竟背后是怎么运行的?你是否对Python的浅拷贝、深拷贝理解得不够明白?

今天我想给大家推荐一个网站,它可以帮你可视化你每一行代码的执行,让你对自己写的代码有更深入的理解。

代码可视化执行神器

这个网站网址是https://pythontutor.com/

pythortutor官网首页

上图是这个网站打开的样子,除了Python,它还支持可视化Java、JavaScript、C、C++语言的每一步代码的执行。

pythontutor网站怎么使用

我们现在用一段代码来看看这个可视化执行工具怎么使用吧?

点击上图网页的Start visualizing your code now, 我们来到一个新的网页。

在上方选择We write code in Python3.6, 然后在方框中输入如下代码。

import copy
a = [1, 2, [3, 4]]
b = copy.copy(a)
c = copy.deepcopy(a)
print(a, b, c)
a[0]= 5
print(a, b, c)
a[2][0] = 6
print(a, b, c)

python代码

点击上图网页中的Visualize Exection, 让我们一起看看浅拷贝和深拷贝的区别。

我们点击Next,当第5行代码刚执行完时,我们可以看到 b是a的浅拷贝,b和a中的嵌套list [3, 4] 其实指向的是同一个地址。

python代码执行截图

当我们继续点击Next,一直执行完11行代码,我们可以看到如下的输出,以及每个变量中元素存储的地址。

python代码执行截图

不知道这个结果和你想的结果一样吗?

如果我们把代码改成这样

python代码

你能想到如下的结果吗?

python代码执行截图

可能有小伙伴好奇为什么上面两种情况会有不一样的结果呢?

其实是因为Python中的浅拷贝有两种情况

  • 针对不可变类型,比如Number、String、Tuple,浅拷贝会指向同一个地址,不会开辟新空间。
  • 针对可变类型,比如List、Dictionary、Set,浅拷贝会对最外层元素分配新的地址,里层元素还是指向同一个地址。

有个这个可视化神器,不知道会不会让你更懂代码呢?让我再考考你,Python的浅拷贝有几种实现方法呢?

发表评论