ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python3中变量引用对象-如何防止原始数据被修改

2021-11-12 19:34:11  阅读:204  来源: 互联网

标签:变量 指向 对象 引用 变量名 原始数据 Python3 out


        在python中对一个变量(变量名)赋值前,变量的作用仅仅是一个标识符,只有赋值后(建立了指向对象的引用)才被创建。"赋值"后的变量指向响应的对象,类型属于对象,不再是变量。

变量引用对象有两种引用方式:一般引用共享引用。

一般引用

x = 1
x = 'abc'

上述代码中数值1和字符串“abc”分别是两种对象,初始变量名x赋值对象1被创建,变量名x指向对象1的内存空间,之后变量名x又指向了字符串"abc"的内存空间。

共享引用

共享引用即多个变量名指向同一个对象,当修改其中一个变量(即修改该变量指向的对象)时,由于引用同一个对象,所以其他变量也会受到影响。如下代码所示

In: a = [1,2,3] # a指向对象[1, 2, 3]
    b = a   # b指向a引用的对象[1,2,3]
In: b
out:[1,2,3]
In: a[1] = 99
In: a
out: [1,99,3]
In: b
out: [1,99,3]
In: b.append('qq')
out: [1,99,3,'qq']
In: a
out: [1,99,3,'qq']

在给一个变量名赋值后,修改该变量名时,如何防止原始也被修改?使用copy.deepcopy() 操作替换引用操作,即为变量名创建一个新的对象,使变量名引用到新的对象,这样共享引用就变成了一般引用。方法如下

import copy
a = [1,2,3]
b=copy.deepcopy(a)  #变量名b引用吃用copy创建的一个和[1,2,3]对象数值一样,内存位置不一样的新的 
                     对象。

In: b.pop(0)
In: b
out: [2,3]
In: a
out: [1,2,3]

注意:以下代码中变量名a和变量名b引用的是两个不同的对象,[1, 2, 3]和[1],不是共享引用,因为引用的是两个不同对象,所以修改时不会相互影响。

a = [1, 2, 3]
b = a[0]

In: b.append(4)
out:[1,4]
In: a
out:[1,2,3]
In: a[0] = 9
    a
out: [9, 2, 3]
In: b
out:[1, 4]

标签:变量,指向,对象,引用,变量名,原始数据,Python3,out
来源: https://blog.csdn.net/qingtianhaoshuai/article/details/121294020

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有