python 修改对象的值

前言

python修改对象的值时常见有两种情况
一种是原地修改对象,即对象的值变化了,但对象还是那个对象,修改前后对象的内存地址没有变化
另一种是,修改对象值时在内存中开辟了一段新的内存空间,产生了一个新的对象,修改前后不是同一个对象,内存地址不同

extend()与拼接

列表的extend()

image

如上,a指向一个列表,列表的值虽然修改,但其在内存中的id值没有变化,说明修改前后依然是同一个对象

列表的拼接

image

如上,a2依然指向一个列表,现在用普通赋值的方法拼接2个列表修改a2的值,但修改后的a2并不似修改前的a2,他们并不是同一个对象
此时,修改后产生的是一个新的对象,a2这个变量名指向了这个新的对象而已

比较

要修改列表的值,用普通赋值的方法进行拼接会开辟一段新的内存地址,产生一个新的对象,而extend()是在原对象基础上进行修改,entend()的效率比拼接高

增强赋值与普通赋值

形如 a +=1的被成为增强赋值,就是把二元运算与赋值运算放在一起
a = a+1 这种就是普通赋值

这两者很相似,但还是有一些区别,很多地方说增强赋值的运行效率高于普通赋值

在面对可变对象时,增强赋值时就地修改对象,普通赋值则会产生一个新的对象
在面对不可变对象时,两者都会产生一个新的对象

可变对象

增强赋值与可变对象

image

普通赋值与可变对象

image

不可变对象

增强赋值与不可变对象

image

普通赋值与不可变对象

image

posted @ 2023-11-30 17:09  工作手记  阅读(95)  评论(0编辑  收藏  举报