温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python变量赋值机制实例分析

发布时间:2022-02-21 13:41:56 来源:亿速云 阅读:160 作者:iii 栏目:开发技术

这篇“python变量赋值机制实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python变量赋值机制实例分析”文章吧。

先说结论:

变量赋值属于浅拷贝(关于深拷贝和浅拷贝的区别可以自己了解下)。故如果是可变类型变量(如a是list类型,a=b)赋值,修改a会牵连到b;如果是不可变类型(如int)的赋值,则修改任意变量不会传递。

1. 可变类型赋值

python变量赋值机制实例分析

可以看出,对于可变类型赋值,变量始终指向同一块地址。

2. 不可变类型赋值

python变量赋值机制实例分析

对于不可变类型变量的赋值,刚开始是指向同一块地址,但修改任意变量,则修改的变量指向另外一块地址,不会影响另外一个变量。

那么问题来了,对于自定义的类型进行变量赋值,属于哪一种呢?

3. 自定义类型变量赋值

python变量赋值机制实例分析

 可以看出,对自定义变量中的属性进行修改也会传递。

但是,如果对整体变量重新赋值呢?

python变量赋值机制实例分析

可以看出,如果对整体变量重新赋值,修改不会传递,修改的变量会指向新的地址。

对于自定义变量赋值的区别,不留意很容易踩坑,如下面函数,将列表转化为链表:

python变量赋值机制实例分析

创建head结点的副本cur,对其进行赋值,赋值后再让它指向下一个节点,最终返回头结点,但结果出人意料。仔细分析发现,在for循环中重新对cur赋值,cur = Node(i),使得cur不再指向head节点,而是指向另一块内存地址,此时headcur分路扬镳,再也没有关系了。

正确的做法是:

python变量赋值机制实例分析

在for循环内,不对cur本身进行更改,只对其属性next进行更改,这样cur和head始终指向同一块地址,最终return head.next(因为第一个node没数据,真正的node从head.next开始) 

以上就是关于“python变量赋值机制实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI