Python中的可变对象

可变对象与不可变对象

关于什么是对象不是这篇的重点,可查看这篇

Python中面向对象的简单应用

可变对象就是说对象的值是可以改变的,序列中可变对象有list 不可变对象有str、tuple

那么问题又来了,什么是序列?

  • 序列是Python中最基本的一种数据结构
  • 数据结构其实就是数据在计算机中的存储方式
  • 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引);并且序列中的数据会按照添加的顺序来分配索引

关于对象

对象在内存中的存储保存了三个数据

  • id(标识)即内存地址,相当于C语言的指针
  • type(类型)即数据类型,int、str、bool、float等…
  • value(值) 即对象存储的内容,就是值

整形对象123,字符对象hello在内存中的数据结构如下图

在这里插入图片描述
而将对象赋值给变量就相当于将对象的值设定为对象的id,即内存地址,也就是指针
在这里插入图片描述

图解可变对象

list类型就是可变对象,即可以随意修改其索引对应的值,即对象的id、type是没有发生变化,改变的只是对象的值

a = [1,2,3]
print('修改前的a =',a,id(a))
a[0] = 2
print('第一次修改后的a =',a,id(a))
a = [4,5,6]
print('第二次修改后的a =',a,id(a))

执行结果
修改前的a = [1, 2, 3] 2326392234632
第一次修改后的a = [2, 2, 3] 2326392234632
第二次修改后的a = [4, 5, 6] 2326392740424

在这里插入图片描述在这里插入图片描述

如果在指定一个变量指向这个0x111,那么这个修改这个变量的值会发生什么变化呢?

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

#修改变量b的值
b[0] = 2
print('修改后的b =',b,id(b))

执行结果
a = [1, 2, 3] 1979100914312
b = [1, 2, 3] 1979100914312
修改后的b = [2, 2, 3] 1979100914312

可见,会同时修改之前变量a的指向,这是因为a与b指向的是同一块内存空间

在这里插入图片描述

总结:

  • a[0] = 2 (改对象)

    • 这个操作是在通过变量去修改对象的值
    • 这种操作不会改变变量所指向的对象 (如上图所示)
    • 当去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现
  • a = [4,5,6] (改变量)

    • 这个操作是在给变量重新赋值
    • 这种操作会改变变量所指向的对象
    • 为一个变量重新赋值时,不会影响其他的变量

一般只有在为变量赋值时才是修改变量,其余的都是修改对象

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值