时间:2021-05-20
在python中,我们使用变量时,并没有声明变量的存在和类型。类型是在运行过程中自动决定的。
a = 3
python将会执行三步去完成上面这个请求。
1.创建一个对象代表3
2.创建一个变量a,如果a未创建。
3.将变量a与对象3相连接。
可以将变量a看作对象3的一个引用。
a = 3
b = a
多个变量可以指向同一个对象,在Python中叫共享引用。
Python在每个对象中保持了一个计数器,用于记录当前指向该对象的引用的数目,一旦计数器被设置为0,该对象的内存空间就会自动回收。
原处修改对象
由于共享引用的存在,有一些对象和操作会在原处修改对象。
Python中对象可分为可变类型对象和不可变类型对象。
可变对象:列表,字典
不可变对象:数字,字符串,元组
如果变量是不可变对象的引用,对变量名的修改不会影响其他变量,而是直接连接到修改的对象。
a = 3
b = a
print(a)# 3
print(b)# 3
a = 4
print(a)# 4
print(b)# 3
如果变量是可变对象的引用,对变量名的修改会影响其他变量。
a = [1,2,3]
b = a
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]
a[0] = 4
print(a)# [4, 2, 3]
print(b)# [4, 2, 3]
拷贝
所以当你需要创建一个与原列表一样同时又独立于原列表的列表时,可以使用拷贝。
下面介绍最常用的两种。
a = [1,2,3]
b = a[:]
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]
a[0] = 4
print(a)# [4, 2, 3]
print(b)# [1, 2, 3]
此时b引用的是a所引用的对象的拷贝。a,b指向不同的内存区域。
在字典和集合中,无法使用这种方法。
可以使用标准库中的copy模块
import copy
a = [1,2,[3]]
b = copy.copy(a)# 浅拷贝
c = copy.deepcopy(a)# 深拷贝
a[0] = 0
a[-1].append(4)
print(a)# [0, 2, [3, 4]]
print(b)# [1, 2, [3, 4]]
print(c)# [1, 2, [3]]
浅拷贝中可变对象中嵌套的可变对象的引用还是原来的引用。
深拷贝可以拷贝嵌套的对象结构。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、背景我们先谈谈为什么在Python编码过程中强烈推荐使用类型注解?Python对于初学者来说是非常好上手,原因是在于对计算机底层原理的高度封装和动态语言的特
一、域名解析生效原理域名解析生效的过程,是域名与IP绑定的过程。当解析生效后,用户访问域名时的实现机制是:由DNS服务器询问域名指向了哪个IP地址,再由DNS服
dnspod、3322等。在动态IP环境下,如何使用动态解析及路由配置,将网站发布到外网,和实现外网访问内网应用。 1、如果路由器分配的是动态公网IP,且路由
Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssi
Hibernate工作原理及为什么要用?原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xm