美文网首页
小谈Python可变对象与不可变对象

小谈Python可变对象与不可变对象

作者: Zoulf | 来源:发表于2018-06-01 19:50 被阅读0次

同事准备入Python坑,有点地方不理解,故写文助之。

可变对象与不可变对象

s1 = 'y'
print(id(s1))  # 45180648
s1 = s1 + 'z'
print(id(s1))  # 46573608,变化了,证明上述操作(修改操作)其实是重新开辟了一个内存地址

l1 = [1]
print(id(l1))  # 60786632
l1.append(2) # 没变,证明上述操作(修改操作)没有重新开辟新的内存空间
print(id(l1))  # 60786632

所以他们的区别就是当发生变化时,内存地址是否会重新开辟。

赋值

将一个对象的地址赋值给一个变量,让变量指向该地址,是从右往左看(读)的。

print(id('ypc'))  # 48296424
s1 = 'ypc'  # 将 48296424('ypc') 赋给s1变量, 反之就是s1 指向 48296424
print(id(s1))  # 48296424

s2 = s1  # 将48296424(s1/'ypc') 赋给s2变量, 反之就是s2 指向 48296424
print(id(s2))  # 48296424

两者结合(赋值与可变对象...)

# 不可变对象
s1 = 'ypc'
s2 = s1
print(s1, id(s1))  # ('ypc', 54404320L)
print(s2, id(s2))  # ('ypc', 54404320L)

s1 = 'zoulf'
print(s1, id(s1))  # ('zoulf', 64656500L)
print(s2, id(s2))  # ('ypc', 54404320L)
# 这里也就验证了前面不可变对象改变时,新开辟了一个内存地址


# 可变对象
l1 = [1, 2]
l2 = l1
print(l1, id(l1))  # ([1, 2], 58492872L)
print(l2, id(l2))  # ([1, 2], 58492872L)

l1.append('3')
print(l1, id(l1))  # ([1, 2, '3'], 58492872L)
print(l2, id(l2))  # ([1, 2, '3'], 58492872L)
# 这里也就验证了前面可变对象改变时,未开辟新的内存地址

# 但是注意,不可变对象的赋值操作
list1 = [1]
print(id(list1))  # 45885640
list1 = [1]
print(id(list1))  # 45886280

# 这也就说明不可变对象发生改变时,内存地址不变的情况是调用它内部的方法,如append , list1[0] = 2
# 而赋值操作,即便是同样的值,也会改变内存地址,而不可变对象不会有这种情况(赋同样值不改变内存地址)

ss1 = 'd'
print(id(ss1))  # 53641944
ss1 = 'd'
print(id(ss1))  # 53641944

相关文章

  • 小谈Python可变对象与不可变对象

    同事准备入Python坑,有点地方不理解,故写文助之。 可变对象与不可变对象 所以他们的区别就是当发生变化时,内存...

  • Python浅拷贝 深拷贝

    内存泄漏太可怕。 Python 可变对象 & 不可变对象 在Python中,对象分为两种:可变对象和不可变对象。 ...

  • Python面试

    Python中万物皆对象,对象有可变(mutable)与不可变(immutable)对象 在python中,str...

  • python可变和不可变对象

    python中有可变对象和不可变对象,可变对象:list,dict.不可变对象有:int,string,float...

  • python中可变对象和不可变对象

    Python在heap中分配的对象分成两类:可变对象和不可变对象。 所谓可变对象是指,对象的内容可变,而不可变对象...

  • python可变对象和不可变对象

    Python在heap中分配的对象分为两类:可变对象和不可变对象。 可变对象:list,dict 不可变对象:in...

  • Python中的可变对象和不可变对象

    Python中的可变对象和不可变对象 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变。当改...

  • Python浅拷贝与深拷贝

    Python浅拷贝与深拷贝 一、可变对象与不可变对象 见Python变量 二、copy模块 对象拷贝是指在内存中创...

  • 8 关于 Python 的变量

    Python 的对象一般可以分为可变对象与不可变对象这两类。具体解释如下: 可变对象:对象存放的地址的值会原地改变...

  • Python浅拷贝与深拷贝的一点简单理解

    Python中的对象分为可变对象与不可变对象,其区别主要在于内存地址,也即id的不同对于不可变对象,浅拷贝与深拷贝...

网友评论

      本文标题:小谈Python可变对象与不可变对象

      本文链接:https://www.haomeiwen.com/subject/briksftx.html