Python:Python进阶:内存管理机制(二):可变序列和 不可变序列

文章讲述了Python中的可变序列(如列表和字典)和不可变序列(如整数、浮点数、元组和字符串)的区别。不可变序列在修改时会创建新对象,而可变序列在同一内存地址上改变内容。这种差异影响了内存使用和性能,对于频繁修改的场景,可变序列更高效,但可能导致多个引用指向相同值的情况。
摘要由CSDN通过智能技术生成

可变序列和不可变序列


定义:

  • 可变序列:列表list , 字典dict ,对象本身进行增删改的操作,而不新建对象,变量还是引用原对象内存地址
  • 不可变序列:整型int 浮点型 float 元组 tuple 字符串 string,对象本身进行增删改的操作后,会新建对象,变量会引用新对象的内存地址

1. 不可变序列

print("不可变对象")
x = 1
print(id(x))
y = 1
print(id(y))

x= 2
print(id(x))
y = 2
print(id(y))

z=y
print(id(z))

x+=2
print(id(x))

# 打印结果
不可变对象
2232814141680
2232814141680

2232814141712
2232814141712
2232814141712

2232814141776

下面我们用一个图分析下
在这里插入图片描述

  1. 不可变对象优点:不管内存中有多少个引用,对象实体是由一个,只占用一块内存
  2. 不可变对象缺点:当需要对变量进行运算,改变变量引用的对象时,会创建新对象,如果频繁的运算,就会频繁的创建新对象

2. 可变序列

print("可变对象")
a = [1,2,3]
print(id(a))
b = [1,2,3]
print(id(b))

a.append(4)
print(id(a))

a+=[2]
print(id(a))
print(a)

a = [1,2,3,4,2]
print(a)
print(id(a))


# 编译打印结果
可变对象
2544116590912
2544116526848

2544116590912
2544116590912
[1, 2, 3, 4, 2]
[1, 2, 3, 4, 2]
2209172023488

在这里插入图片描述
可变序列

  1. 允许对象的内容进行变更(如:a.append() ,a+=[2])即值的变化,但是地址不会变化,变量引用的对象地址不会改变
  2. 如果类似 a= [1,2,3,4,2] 这样的赋值,内存中会有两个对象,每个对象都有自己的地址,相当于内存中对于同值对象保存了多份。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值