python变量赋值机制踩坑记录
作者:惊瑟 发布时间:2021-08-19 08:59:44
标签: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开始)
来源:https://blog.csdn.net/qq_34062683/article/details/123029850


猜你喜欢
- defaultdict是普通字典dict的一个子类。通过collections库的defaultdict()方法创建。defaultdict
- 如何完美的卸载掉Mysql?按以下几个步骤去执行。步骤一确认你的mysql服务是关闭的状态,不然卸载不干净。在我的电脑(计算机)-- 管理
- 先 Create table 吧create table emp(id int not null primary key,name varc
- Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select
- 前言随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付、银行身份验证、手机人脸解锁等等。识别废话少说,这里我们使用 ope
- 用div+css制作页面,想实现左右两部分固定宽度,而中间部分不固定,并随着屏幕分辨率的的变化而自动伸缩。大家可知道应该如何实现? &nbs
- 1.二进制读取模式rt 读取文本文件(默认值)rb 读取二进制文件file_name = "C:/Users/cheng/Desk
- 相信为数不少的系统管理员每天都在做着同一样的工作——对数据进行备份。一旦哪一天疏忽了,而这一天系统又恰恰发生了故障,需要进行数据
- 随机数我们都知道,就是计算机通过某种算法,“随机”的生成一个数字。很多编程语言都有内置的方法来生成随机数,那么 GoLang 中是怎样一种情
- 1.导入模块import cv2 as cvimport numpy as np 2.OpenCV绘图大致步骤OpenCV 图形绘制步骤(1
- vue Print.js打印页面样式不出现解决方案加上这句就好了!完美!vue-print-nb打印问题总结1、表格的列缺失(element
- 目录总体思路:判断链接是否指向文件:下载文件:获取 url 下的所有链接:最近维基 jie mi 彻底公开了网站的全部文件,我就在想如何使用
- 如何判断年份是否为闰年闰年:所谓闰年即能被4整除,但不能被100整除的年份,或者能被400整除的年份。def Year():
- 本文实例总结了Python实现判断一个字符串是否包含子串的方法。分享给大家供大家参考,具体如下:1.使用成员操作符 in>>&g
- DQN算法是DeepMind团队提出的一种深度强化学习算法,在许多电动游戏中达到人类玩家甚至超越人类玩家的水准,本文就带领大家了解一下这个算
- 关于使用CTE(公用表表达式)的递归查询----SQL Server 2005及以上版本公用表表达式 (CTE) 具有一个重要的优点,那就是
- REST_FRAMEWORK 配置对使用 rest_framework 框架的项目来说,可以使用框架的设置来对api的访问频率进行限制RES
- 1,新建一个项目File --> New Project...2,新建一个文件右键单击刚建好的helloWord项目,选择New --
- 使用破解补丁方法虽然麻烦,但是可用激活到2099年,基本上是永久激活了,毕竟在座各位能活到这个年份也是寥寥无几了吧!!步骤一、下载破解补丁,
- 引用是什么在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量