python变量赋值机制踩坑记录

 更新时间:2022年02月21日 10:42:33   作者:惊瑟  
这篇文章主要介绍了python变量赋值机制踩坑记录,我们都知道python有深拷贝和浅拷贝,但变量赋值又是什么机制呢?这是个容易被忽略却又极易踩坑的点,下面我们来一探究竟,需要的朋友可以参考一下

先说结论:

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

1. 可变类型赋值

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

2. 不可变类型赋值

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

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

3. 自定义类型变量赋值

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

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

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

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

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

正确的做法是:

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

到此这篇关于python变量赋值机制踩坑记录的文章就介绍到这了,更多相关python变量赋值踩坑记录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python Tkinter美化弹窗的示例详解

    Python Tkinter美化弹窗的示例详解

    在Python编程中,Tkinter是标准GUI(图形用户界面)库,它允许开发者创建桌面应用程序,本文将详细介绍如何使用Tkinter创建并美化弹窗,需要的可以参考下
    2024-12-12
  • Python3 中return和yield的区别

    Python3 中return和yield的区别

    这篇文章主要介绍了Python3 中return和yield的区别,return和yield都用来返回值;在一次性地返回所有值场景中return和yield的作用是一样的,但是具体有什么区别呢,带着疑问一起进入下面文章学习详细内容吧
    2022-06-06
  • Python基础之画图神器matplotlib

    Python基础之画图神器matplotlib

    这篇文章主要介绍了python基础之画图神器matplotlib,文中有非常详细的代码示例,对正在学习python的小伙伴们有一定的帮助,需要的朋友可以参考下
    2021-04-04
  • Python餐饮AI机器人学习数据网络抓取

    Python餐饮AI机器人学习数据网络抓取

    在餐饮行业,AI机器人可以通过学习大量的相关数据来提供更好的服务和体验,在文本中,我们将介绍如何使用python进行餐饮A I机器人学习数据的网络抓取,并提供代码的示例和最佳实践
    2023-12-12
  • MATLAB中text函数使用的语法与示例代码

    MATLAB中text函数使用的语法与示例代码

    text函数的功能是向数据点添加文本说明,下面这篇文章主要给大家介绍了关于MATLAB中text函数使用的语法与示例的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • python中(负数)整除和取模运算方式

    python中(负数)整除和取模运算方式

    Python中的取模运算符是%,它与其他语言中的取余符号相同,整除运算符是//,表示向下取整,在Python中,正数的取余和取模结果相同,但负数的取余和取模结果有所不同,取余运算在计算时向0方向舍弃小数位,而取模运算向负无穷方向舍弃小数位
    2024-10-10
  • Python进程池log死锁问题分析及解决

    Python进程池log死锁问题分析及解决

    最近线上运行的一个python任务负责处理一批数据,为提高处理效率,使用了python进程池,并会打印log,本文给大家分析了Python进程池log死锁问题以及解决方法,需要的朋友可以参考下
    2024-01-01
  • python 获取微信好友列表的方法(微信web)

    python 获取微信好友列表的方法(微信web)

    今天小编就为大家分享一篇python 获取微信好友列表的方法(微信web),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python中字典(dict)合并的四种方法总结

    Python中字典(dict)合并的四种方法总结

    在Python中将字典(dict)进行合并操作,是一个比较常见的问题。下面这篇文章主要给大家总结介绍了关于Python中字典(dict)合并的四种方法,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-08-08
  • Pytorch实现tensor序列化和并行化的示例详解

    Pytorch实现tensor序列化和并行化的示例详解

    这篇文章主要介绍了Pytorch实现tensor序列化和并行化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,感兴趣的同学们下面随着小编来一起学习学习吧
    2023-12-12

最新评论