可变对象和不变对象

可变对象是指,一个对象在不改变其所指向的地址的前提下,可以修改其所指向的地址中的值;

不可变对象是指,一个对象所指向的地址上值是不能修改的,如果你修改了这个对象的值,那么它指向的地址就改变了,相当于你把这个对象指向的值复制出来一份,然后做了修改后存到另一个地址上了,但是可变对象就不会做这样的动作,而是直接在对象所指的地址上把值给改变了,而这个对象依然指向这个地址。

参考: https://www.cnblogs.com/xiaxiaoxu/p/9742452.html

可变对象与不可变对象的区别在与可变对象可以修改变量的值(即修改变量的值后,内容变了,变量地址不变),而不可变对象修改变量的值后,地址也会变化.

区别:1不变对象可以作为dict的key,而可变对象不行,如list不可作为key,但tuple可以

不可变对象:

# 性质1
# python不可变对象有number str tuple,除了tuple外,有时候内容一样地址就一样https://www.jianshu.com/p/b3157c9751d0
a = 1
print(id(a))
b = 1
print(id(b))
c = a + 0
print(id(c))
p = (1,2,3)
q = (1,2,3)
# tuple不具有这一性质
print(id(p))
print(id(q))
# 9289312
# 9289312
# 9289312
# 140232056227664
# 140232056227808

# 性质2
# 如下当改变i的值后,内存空间中原先的3会被python的垃圾收集机制自动回收掉,
# 计算出的结果5会开辟新的空间来存放,i中存放这个新内容的地址,如果计算结果是2,则地址不会变
i = 3
print(id(i))
i = 3 + 2
print(id(i))
# 9289376
# 9289440

# s执行replace后把里面的“a”换成了“A“相当于创建的新的地址存放”Abc“,s中仍然是abc,返回的是新的内容
# m排序后,m中的值变了,返回是空
# 可见对不可变对象而言,调用它的方法,只会返回一个新对象,原先的对象不变
# 而对可变对象而言,是在原有的对象上直接修改的,返回值为空
s = 'abc'
s1 = s.replace('a','A')
print('s',  s)
print('s1', s1)
m = [11,2,3]
m1 = m.sort()
print('m',  m)
print('m1', m1)
# s abc
# s1 Abc
# m [2, 3, 11]
# m1 None
View Code

相关文章:

  • 2021-09-27
  • 2022-12-23
  • 2021-07-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-03
猜你喜欢
  • 2022-12-23
  • 2019-10-20
  • 2021-12-27
  • 2022-01-01
  • 2022-12-23
  • 2022-02-21
  • 2021-07-14
相关资源
相似解决方案