python变量赋值机制实例分析
这篇"python变量赋值机制实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"python变量赋值机制实例分析"文章吧。
先说结论:
变量赋值属于浅拷贝(关于深拷贝和浅拷贝的区别可以自己了解下)。故如果是可变类型变量(如a是list类型,a=b)赋值,修改a会牵连到b;如果是不可变类型(如int)的赋值,则修改任意变量不会传递。
1. 可变类型赋值
可以看出,对于可变类型赋值,变量始终指向同一块地址。
2. 不可变类型赋值
对于不可变类型变量的赋值,刚开始是指向同一块地址,但修改任意变量,则修改的变量指向另外一块地址,不会影响另外一个变量。
那么问题来了,对于自定义的类型进行变量赋值,属于哪一种呢?
3. 自定义类型变量赋值
可以看出,对自定义变量中的属性进行修改也会传递。
但是,如果对整体变量重新赋值呢?
可以看出,如果对整体变量重新赋值,修改不会传递,修改的变量会指向新的地址。
对于自定义变量赋值的区别,不留意很容易踩坑,如下面函数,将列表转化为链表:
创建head
结点的副本cur,对其进行赋值,赋值后再让它指向下一个节点,最终返回头结点,但结果出人意料。仔细分析发现,在for循环中重新对cur赋值,cur = Node(i)
,使得cur不再指向head节点,而是指向另一块内存地址,此时head
和cur
分路扬镳,再也没有关系了。
正确的做法是:
在for循环内,不对cur本身进行更改,只对其属性next进行更改,这样cur和head始终指向同一块地址,最终return head.next
(因为第一个node没数据,真正的node从head.next开始)
以上就是关于"python变量赋值机制实例分析"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。