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打印出变量
我们现在要键入更多的变量并且把它们打印出来。这次我们将使用一个叫“格式化字符串 (format string)”的东西. 每一次你使用 " 把一些文本引用...详情>>
2022-11-07 10:37:00Python中的可变对象与不可变对象
总结:对象可以分为 可变对象和不可变对象 可变对象:该对象所指向的内存中的值是可以被改变的,如:String、Tuple、Number。不可变对象:该对...详情>>
2022-11-07 10:26:00Python 2的结束意味着什么
Python 2的官方错误修复和安全补丁将停止更新。核心开发团队将不会修复Python 2解释器或Python 2标准库中新发现的问题。但是企业供应商仍可以自...详情>>
2022-11-07 10:24:00django扩展user用户字段inlines方式?
User为Django自带User表,需要关联详细信息表,类为UserBaseMsg(表名为user_base_msg)和另外一张表的员工状态信息,类为UserWorkMsg(表名为user...详情>>
2022-11-07 10:23:24