网易首页 > 网易号 > 正文 申请入驻

Python 中变量赋值传递时的引用和拷贝介绍

0
分享至

Python 赋值过程中不明确区分拷贝和引用,一般对静态变量的传递为拷贝,对动态变量的传递为引用。

曾经看到这样一个问题,一个字典中的元素是列表,将这个列表元素赋值给一个变量,然后修改这个列表中元素的值,结果发现,字典中那个列表也同样修改了。那个问题如下:

dict = {'a':[1,2,3,4,5],'b':2} x = dict['a'] for i in range(5): x[i] = 0 print(dict['a'])

程序运行结果如下:

[0, 0, 0, 0, 0]

这儿涉及到Python赋值到底是引用还是拷贝一份的问题,即赋值时是传值还是传址。上面问题是将"a"的值赋给了x出现了上述情况,如果是将"b"的值赋给了x,当我们修改x的值时,字典dict的值并不受影响。

>>> dict = {'a':[1,2,3,4,5],'b':2} >>> x = dict['b'] >>> x 2 >>> x=x+3 >>> x 5 >>> dict {'a': [1, 2, 3, 4, 5], 'b': 2} >>>

那么问题来了,变量赋值传递时什么情况下是传值(拷贝),什么情况下是传址(引用)呢?

直接拷贝

当我们不知道是引用还是拷贝的情况下,可以显式的拷贝。比如字典对象本身都具有拷贝的方法:

x=dict.copy()

没有拷贝方法的对象,也是可以拷贝的。这儿我们引入一个深拷贝的概念,深拷贝——即python的copy模块提供的一个deepcopy方法。深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,在这个过程中我们对这两个变量中的一个进行任意修改都不会影响其他变量。还是上面的代码,如果改成如下:

import copy dict = {'a':[1,2,3,4,5],'b':2} x = copy.deepcopy(dict['a']) for i in range(5): x[i] = 0 print(dict['a'])

运行结果dict值不受影响。

除了深拷贝,copy模块还提供一个copy方法,称其为浅拷贝,对于简单的对象,深浅拷贝都是一样的,上面的词典对象的copy方法就是浅拷贝。

>>> dict {'a': [8, 2, 3, 4, 5], 'b': 4} >>> dd=copy.copy(dict) >>> dd {'a': [8, 2, 3, 4, 5], 'b': 4} >>> dd['a'][0]=7 >>> dd {'a': [7, 2, 3, 4, 5], 'b': 4} >>> dict {'a': [7, 2, 3, 4, 5], 'b': 4} >>> ee=dict.copy() >>> ee {'a': [7, 2, 3, 4, 5], 'b': 4} >>> ee['a'][0]=9 >>> ee {'a': [9, 2, 3, 4, 5], 'b': 4} >>> dict {'a': [9, 2, 3, 4, 5], 'b': 4} >>> ee['b']=5 >>> ee {'a': [9, 2, 3, 4, 5], 'b': 5} >>> dict {'a': [9, 2, 3, 4, 5], 'b': 4} >>>

浅拷贝时改变第一层次相互不受影响(上例中词典b值的修改),第二层次(上例中词典a的列表值修改)就相互影响了,改一个,其他跟着变。看看id吧:

>>> id(dict) 20109472 >>> id(dd) 20244496 >>> id(ee) 20495072 >>> id(dd['a']) 20272112 >>> id(ee['a']) 20272112 >>> id(dict['a']) 20272112 >>>

可见词典各个拷贝的id是不同的,但词典a值的id是相同的。如果我们需要真正意义的拷贝,就用深拷贝吧。

传递规则

Python 赋值过程中不明确区分拷贝和引用,一般对静态变量的传递为拷贝,对动态变量的传递为引用。(注,对静态变量首次传递时也是引用,当需要修改静态变量时,因为静态变量不能改变,所以需要生成一个新的空间存储数据)。

  1. 1. 字符串,数值,元组均为静态变量
  2. 2. 列表,字典为动态变量

变量有时比较复杂,存在组合现象,比如字典中包含列表,列表中包含字典,但赋值时,总是属于某个类型。如果实在不清楚状况,可以试验一下,用id()这个函数看看,如果是引用,两个变量指向的地址是相同的。例如:

>>> a=6 >>> id(a) 10413476 >>> b=a >>> id(b) 10413476 >>> b=8 >>> id(b) 10413452 >>>

修改变量b之前,a和b指向的地址是相同的,修改b后,地址就变了。

原文来自:https://www.runoob.com/w3cnote/python-variable-references-and-copies.html
本文地址:https://www.linuxprobe.com/transfer-in-python.html
Linux命令大全:https://www.linuxcool.com/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
提前还贷潮,正断崖式下降!

提前还贷潮,正断崖式下降!

樱桃大房子
2024-11-29 23:15:42
终于来了!CBA强力锋线被曝满血复活,他才是广东队的3号位答案?

终于来了!CBA强力锋线被曝满血复活,他才是广东队的3号位答案?

绯雨儿
2024-12-01 16:10:31
德国大众宣布出售新疆工厂

德国大众宣布出售新疆工厂

EETOP半导体社区
2024-11-29 11:47:45
已故亲人存款如何更便利提取?金融监管总局:鼓励银行在储蓄合同增加条款约定相关事宜

已故亲人存款如何更便利提取?金融监管总局:鼓励银行在储蓄合同增加条款约定相关事宜

财联社
2024-12-01 13:50:08
项立刚炮轰叶嘉莹:退休就跑回国养老,有什么可吹的!

项立刚炮轰叶嘉莹:退休就跑回国养老,有什么可吹的!

老蒋谈策划
2024-11-30 10:24:32
癌症患者福音!不开刀,不化疗,一根针冻死癌细胞,次日就能出院

癌症患者福音!不开刀,不化疗,一根针冻死癌细胞,次日就能出院

小盖纪实
2024-11-30 17:16:12
“锁边塔克拉玛干沙漠”,看看外国网友怎么说的,一条比一条精彩

“锁边塔克拉玛干沙漠”,看看外国网友怎么说的,一条比一条精彩

阿裤趣闻君
2024-12-01 15:10:31
长寿最大的秘诀,不是运动,不是药补,而是这一个字

长寿最大的秘诀,不是运动,不是药补,而是这一个字

诗词中国
2024-11-29 12:51:23
继卫生巾后,麻辣烫也塌房了!网友:难道今年是百年难遇的塌塌年

继卫生巾后,麻辣烫也塌房了!网友:难道今年是百年难遇的塌塌年

滑稽斑马呀
2024-12-01 15:33:46
去金门玩了三天,有几句话不得不说,告诉你一个真实的金门现状

去金门玩了三天,有几句话不得不说,告诉你一个真实的金门现状

猫小狸同学
2024-11-30 15:45:03
大马士革发生政变?反对派在哈马遇阻,库尔德武装站在阿萨德一边

大马士革发生政变?反对派在哈马遇阻,库尔德武装站在阿萨德一边

鹰眼Defence
2024-12-01 18:13:12
医保砍价就是一场戏?无数网友达成共识,评论区网友不买账!

医保砍价就是一场戏?无数网友达成共识,评论区网友不买账!

眼光很亮
2024-12-01 15:28:59
李佩霞:大量生活照被扒,美腿抢镜,丈夫始终没露面,身份成谜!

李佩霞:大量生活照被扒,美腿抢镜,丈夫始终没露面,身份成谜!

来条娱吃
2024-11-08 11:16:49
范尼开局地狱难度!莱斯特6场不胜,12月需对阵利物浦、曼城等队

范尼开局地狱难度!莱斯特6场不胜,12月需对阵利物浦、曼城等队

直播吧
2024-12-01 07:43:08
马斯克开始动手了!不愧是政府效率部,第一批解雇名单已经出来了

马斯克开始动手了!不愧是政府效率部,第一批解雇名单已经出来了

猫小狸同学
2024-12-01 13:25:02
云南男子顶替亡哥照顾嫂子,怂恿嫂子凑合,直到民警发现真实身份

云南男子顶替亡哥照顾嫂子,怂恿嫂子凑合,直到民警发现真实身份

天字号野史
2024-11-28 11:10:48
浙江官媒重磅发声,围剿吴柳芳的人到了该闭嘴的时候

浙江官媒重磅发声,围剿吴柳芳的人到了该闭嘴的时候

顾礼先生
2024-11-29 16:22:30
对话|李娜:不告诉孩子自己是球星,差点扔掉法网冠军奖杯

对话|李娜:不告诉孩子自己是球星,差点扔掉法网冠军奖杯

澎湃新闻
2024-11-30 16:42:40
我实地感受了下华为是如何改变青浦的,很感慨了

我实地感受了下华为是如何改变青浦的,很感慨了

真叫卢俊
2024-12-01 08:30:13
社区女书记出轨,发裸照威胁原配,大量高清照流出,原配披露细节

社区女书记出轨,发裸照威胁原配,大量高清照流出,原配披露细节

博士观察
2024-11-30 18:56:30
2024-12-01 19:03:00
孙有匪
孙有匪
科技
1595文章数 2008关注度
往期回顾 全部

科技要闻

我国首个商业航天发射场首发成功

头条要闻

媒体:若美国取消中国最惠国待遇 对华平均关税将超60%

头条要闻

媒体:若美国取消中国最惠国待遇 对华平均关税将超60%

体育要闻

两翼齐废,凯恩受伤,还好拜仁有他!

娱乐要闻

黄晓明姥姥去世,祖孙俩手牵手好温馨

财经要闻

女首富,死刑!交出800亿,免死!

汽车要闻

科技是中国豪车梦的支点 腾势Z9走心试驾体验

态度原创

教育
家居
数码
艺术
时尚

教育要闻

孩子总发泄负面情绪怎么办?这份情绪管理指南快收好!

家居要闻

现代设计感 温馨两居室

数码要闻

小米平板7系列预计即将全球发布 已获多项国际认证

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

白幼瘦走下神坛

无障碍浏览 进入关怀版