心蓝的博客 心蓝的博客
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

心蓝

人生苦短,我用python
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • 编程基础

  • python开发环境搭建

  • 基本数据类型

    • 基本数据类型概述
    • 变量的定义和使用
    • 整数类型
    • 浮点数类型
    • 算术运算符
    • 赋值运算符
    • 字符串类型
    • 字符串常用方法
    • 字符串格式化
    • 列表类型
    • 元组类型
    • 12 可变与不可变对象
      • id()
      • 可变类型
      • 不可变类型
      • 可哈希对象
    • 13 深浅拷贝
    • 14 集合类型
    • 字典类型
    • 布尔型
    • None
  • 程序流程控制

  • 函数与代码复用

  • 面向对象

  • 模块和包

  • 文件IO操作

  • python零基础入门
  • 基本数据类型
心蓝
2022-12-14
目录

12 可变与不可变对象

# 可变与不可变类型

python中的数据类型根据底层内存机制分为可变与不可变两种。

# id()

内建函数id()返回值的内存地址。

>>> a = 1
>>> id(a)
4382612480
1
2
3

这里的内存地址是解释器里转换成十进制整数的虚拟地址。

# 可变类型

可变数据类型的数据实例,也称为可变对象。可变对象可以在其id()保持固定不变的情况下改变其取值。

下面的列表,修改值后,id保持不变

>>> ls = [1,2,3]
>>> id(ls)
140453670614592
>>> ls[0] = 'a'
>>> print(ls)
['a', 2, 3]
>>> id(ls)
140453670614592
1
2
3
4
5
6
7
8

基本数据类型中,列表,集合,字典都是可变数据类型。

# 不可变类型

如果修改一个对象的值,必须创建新的对象,那么这个对象就是不可变对象。基本数据类型中,数字,字符串,元组是不可变类型。

例如下面的字符串,修改内容后id发生了改变,也即是创建了新的对象。

>>> s = 'hello'
>>> id(s)
140453671058032
>>> s = 'Hello'
>>> id(s)
140453671057264
1
2
3
4
5
6

不可变类型在需要常量哈希值地方起着重要的作用。

# 可哈希对象

python中一个对象的哈希值如果在其生命周期内绝不改变,就被称为可哈希。

可哈希对象都可以通过内置函数hash进行求值。因为底层计算的原因,可以通过是否可哈希判断对象是否可变。

凡是可哈希的对象都是不可变对象,凡是不可哈希的对象都是可变对象。

>>> hash(1)
1
>>> hash('a')
8371404579657727211
>>> hash([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
1
2
3
4
5
6
7
8

本文完,感谢你的耐心阅读,如有需要可加我微信,备注「博客」并说明原因,我们一起进步,下次见。

#python#零基础
上次更新: 2022/12/15, 21:20:30
元组类型
13 深浅拷贝

← 元组类型 13 深浅拷贝→

最近更新
01
requests让接口测试如此简单 原创
03-31
02
最简明的python正则教程
03-30
03
pycharm激活码
12-30
更多文章>
Theme by Vdoing | Copyright © 2019-2025 心蓝
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式