Python教程

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

本文主要是介绍Python3中变量引用对象-如何防止原始数据被修改,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

        在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中变量引用对象-如何防止原始数据被修改的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!