Python入门 | 那些会导致重新分配内存的操作

文章讨论了Python中的数据类型,区分了可变(如列表、字典)与不可变(如数字、字符串、元组)的区别。在可变类型中,直接修改不会总是引起内存重分配,而重新赋值则会。对于不可变类型,任何操作都会导致新的内存地址。Tensor在PyTorch中的行为类似,加法操作可能改变其内存地址。原地操作对于优化内存使用是重要的策略。
摘要由CSDN通过智能技术生成

如前所述,Python数据类型可以分为:

可变(列表、字典)与不可变(数字,字符串,元组)

可迭代(列表,元组)与不可迭代

可变的数据可以直接修改而不会重新分配内存,但仅限于使用修改操作,如果创建一个同名变量再赋值肯定还是会重新分配内存的。

l1=[1,2,3]
l1=l1.append(4) #重新分配内存
l1.append(5) #不重新分配

tensor也是可变类型,如果用tensor+=1就不会改变地址,如果用tensor=tensor+1就会改变地址

#运行一些操作可能导致为结果分配新内存
y=torch.arange(6).reshape(2,3)

before=id(y)
y=y+1
print(id(y)==before)

before2=id(y)
y+=1
print(id(y)==before2)

但对于不可变类型,不管怎么操作,都一定会改变地址。

#但是 对于不可变类型(数字,元组,字符串)而言,不管什么操作都会改变地址
a=4
before=id(a)
a+=1
id(a)==before

 

原地操作可以减少内存开销。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值