Python中的可变对象与不可变对象
首先,咱们先看两个例子。
a = 1
def fun(a):
a = 2
fun(a)
print(a) # 1
a = []
def fun(a):
a.append(1)
fun(a)print(a) # [1]
代码1中,a初始化值为1,执行fun()方法之后输出仍然是1
代码2中,a初始化值为[], 执行fun()方法之后输出[1]
所有的变量都可以看做是内容中对象的一个引用。可以通过id()方法查看对象在内存中的引用地址。
a = 1
print(id(a))# 261241088def
fun(a): a = 2
print(id(a)) # 261241104fun(a)
print(id(a)) # 261241088
print(a) # 1
通过上述代码,可能比较容易理解,再执行完fun()方法之后a的内存地址发生变化,而最终执行完fun()方法之后a的内存地址又和最初的一样了。
类似这种现象,我们称a为可更改对象。
同样的方法,测试代码2
a = []
print(id(a)) # 47920552
def fun(a):
a.append(1)
print(id(a)) # 47920552
fun(a)
print(id(a))# 47920552print(a)
# [1]
发现执行fun()方法之后,对象a的内存地址并没有发生改变。因为执行append的方法之后只是像列表a中添加了一个元素。指针的指向并没有发生改变。
总结:
对象可以分为 可变对象和不可变对象
可变对象:该对象所指向的内存中的值是可以被改变的,如:String、Tuple、Number。他们本身的值是不可以被改变,修改的时候,会复制一个新的对象,并开辟一份新的内存空间,变量再去指向新的值。
不可变对象:该对象所指向的内存中的值是不会被改变的,如:List、Dict、Set。对其进行修改时,并不会像可变对象那样重新复制一份。而是在原有的基础上进行修改。
猜你喜欢LIKE
相关推荐HOT
更多>>Python如何导入自定义模块?
在Python中,一个文件就叫做一个模块,每一个模块在Python里都被看做是一个独立的文件,以.py为后缀名。模块包含了Python对象定义和Python语句...详情>>
2022-12-01 17:30:29Python中注释方式分为哪两种?
在Python中,注释方式大致分为两种:单行注释和多行注释,#表示单行注释,'''或"""表示多行注释,接下来我们通过这篇文章为大家详细的讲解一下...详情>>
2022-12-01 17:27:32Python语言如何解析参数?
每种编程语言都有创建脚本并从终端运行它们或被其他程序调用的功能,在运行此类脚本时,我们经常需要传递脚本所需的参数,以便在脚本内执行各种...详情>>
2022-12-01 17:24:00Python中水仙花数如何输出?
所谓“Python中水仙花数”是指一个三位数,其各位数字立方和等于该数本身。用Python输出水仙花数,对于有面试需求或者对算法感兴趣的同学,是一...详情>>
2022-12-01 17:20:40Python中如何优化SQL语句?
编程人员一定不陌生SQL语句吧,在我们日常写项目过程中,或多或少都会使用到SQL,SQL主要功能有增删改查,其中最常见的就是查询了,因此SQL语句...详情>>
2022-12-01 17:17:11Python培训问答更多>>
新数据分析师自学要多久?才能赚到更多钱呢
新Python主要用来做什么?
新如何才能知道python语言特点是什么?
新通过培训机构可以更好的学习怎么进行数据分析?
新数据分析培训课程可以免费试听的好处有哪些?
新数据分析师是干嘛的?为什么很多年轻人都会选这个行业?
新数据分析师要学什么才能达到更专业的状态呢
Python面试题库 更多>>
Python中的pass语句是什么?
怎样将字符串转换为小写?
怎么移除一个字符串中的前导空格?
python中的标识符长度能有多长?
Python区分大小写吗?
解释Python中的join()和split()函数
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区