python赋值语句例子_Python中赋值&浅拷贝&深拷贝的简单介绍(示例)

本篇文章给大家带来的内容是关于Python中赋值&浅拷贝&深拷贝的简单介绍(示例) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在写dict数据类型时,有提到过“赋值语句”与copy()函数。

其实说到深浅拷贝,需要考虑具体的数据类型。一部分是不可变对象,如数字、字符串;另一部分是可变对象,如列表、字典等

一、定义解释变量:一个系统表的元素,指向对象的连接空间。

对象:被分配的一块内存,存储其实际的值。

引用:从变量到对象的指针。

不可变对象:一旦创建就不可以修改,如数字、字符串、元组。

可变对象:可以修改的对象,如列表、字典。

赋值:通过语句“=”实现。左边是新建的变量,右边可以是直接内容,或者已存在的变量。是对象的引用,Python没有拷贝该对象,只是拷贝了对象的引用,新变量指向源变量内存地址。

浅拷贝:对一个对象进行拷贝。拷贝最外围的对象本身,内部的元素都只是拷贝了一个引用而已。即新创建了一个类型跟原对象一样、内容是原对象的引用。【浅拷贝对象是新的,对象的引用内容是旧的。】

浅拷贝实现的几种方式:(1)切片:[:];(2)工厂函数,比如list()、dict();(3)使用copy()。

深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。即把对象复制一遍,并且该对象中引用的其他对象也复制。

二、不可变对象

对于不可变对象,例如数字和字符串而言,赋值(=)、浅拷贝(copy())和深拷贝(deepcopy())没有区别,因为他们的对象引用永远指向同一个内存地址。

通过例子演示:>>> var_1 = 123

>>> id(var_1) # 通过id()查看地址

1615552144

>>> var_2 = var_1

>>> id(var_2)

1615552144

>>>

>>> import copy # 浅、深拷贝需要导入copy模块

>>> var_3 = copy.copy(var_1)

>>> id(var_3)

1615552144

>>>

>>> var_4 = copy.deepcopy(var_1)

>>> id(var_4)

1615552144

你会发现var_1 ~ var_4 的id指向是一样的。

三、可变对象

对list、dict等数据类型而言,赋值、浅拷贝和深拷贝,他们对内存地址的变化是不同的。

赋值浅拷贝:值相等,地址相等;

copy浅拷贝:值相等,地址不相等;

deepcopy深拷贝:值相等,地址不相等;

例子一:

base[0]=’name’,是一个string,不可变对象;base[1]=[‘age’,18],是list,可变对象。

base_1、base_2均是base的浅拷贝,三者id()一样。

当对第一个string元素进行不同的更改时,发现id各不相同,不会互相影响,因为字符串(不可变)被显示的拷贝,当修改后,新创建了一个字符对象。

而修改第二个list元素时,不同的修改都只对最后一次修改生效,且互相影响,因为第二个元素列表只是简单的复制了其引用,修改任何一个浅拷贝,都会修改引用的内容。

例子二:深拷贝

创建一个字典对象,并使用深拷贝创建一个新的对象。>>>import copy

>>> var = {"a":1,"b":2,"c":[3,'abc']}

>>> var1 = copy.deepcopy(var)

>>> id(var),id(var1)

(17616992, 15671136) # 地址不相同

>>> id(var['c']),id(var1['c'])

(15695144, 15695384)

>>> id(var['c'][0]),id(var1['c'][0])

(1615550224, 1615550224) # ‘c’元素的内存地址是相同的

>>>

>>> var1['c'][0] = 4

>>> var

{'a': 1, 'b': 2, 'c': [3, 'abc']}

>>> var1

{'a': 1, 'b': 2, 'c': [4, 'abc']}

>>> id(var['c'][0]),id(var1['c'][0])

(1615550224, 1615550240) # 对var1的修改没有影响var

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值