首页 > 其他分享 >可变与不可变类型

可变与不可变类型

时间:2022-08-19 17:47:19浏览次数:63  
标签:对象 不可 数据类型 ls 哈希 可变 类型 id

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

id()

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

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

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

可变类型

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

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

>>> ls = [1,2,3]
>>> id(ls)
140453670614592
>>> ls[0] = 'a'
>>> print(ls)
['a', 2, 3]
>>> id(ls)
140453670614592

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

不可变类型

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

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

>>> s = 'hello'
>>> id(s)
140453671058032
>>> s = 'Hello'
>>> id(s)
140453671057264

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

可哈希对象

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'

标签:对象,不可,数据类型,ls,哈希,可变,类型,id
From: https://www.cnblogs.com/superwuchaofan/p/16562454.html

相关文章

  • python数据类型---字典dict
    python数据类型---字典dict1.基本认识字典是Python里一种常用的数据类型,键值对,keyvalue对,它用于存放具有映射关系的数据。字典中的数据是无顺序的。。。。。。d={key......
  • Python数据类型
    在Python3中,有6种标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典),见表2-2。  Python3中支持3种不同的数值类型,包括int(整型......
  • Python的数据类型-可变类型和不可变类型
    Python数据类型-可变类型和不可变类型的区别python数据类型有6类:不可变数据类型:数字、字符串、元组可变数据类型:列表、集合、字典可变数据类型和不可变数据类型的区别......
  • 第四章 2 数据类型-字符串 练习题
    第四章2数据类型-字符串练习题基础知识1\python语句"".join(list('hellowordld!'))的执行结果是:helloworld!#join()函数,是字符串内置的一个函数,在classstr下面a......
  • JS 有哪些数据类型,如何判断这些数据类型 ?
    最新标准定义了8种数据类型,7种基本数据类型,1中引用数据类型基本数据类型:String,Number,Boolean,undefined,null,Symbol(符号),BigInt(数值类型,表示任意精度的整数)引......
  • c语言中枚举类型
     001、#include<stdio.h>enumset01{aaa,bbb,ccc,ddd};//表示一定整数值的集合的枚举类型。0,1,2,3intmain(void){printf("aaa:%d\n",aaa);......
  • leetcode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(中等)
    一、题目大意https://leetcode.cn/problems/range-sum-query-2d-immutable给定一个二维矩阵matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的左上角......
  • javascript 数据类型
    值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、未定义(Undefined)、Symbol(ES6引入了一种新的原始数据类型,表示独一无二的值)。特殊的值:未定义(Undefined)引......
  • js-数据类型-作用域-作用域链-变量 审核中
    变量变量声明的几种方式varletconst相同之处varletconst都可以用来声明一个变量都拥有函数作用域与全局作用域不同之处var声明的变量有变量提升而let......
  • 哈希类型,列表类型,集合类型,有序集合类型,慢查询,pipline与事务,发布订阅,Bitmap,HyperLogLog
    1API的使用1.1哈希类型###1---hget,hset,hdelhgetkeyfield#获取hashkey对应的field的value时间复杂度为o(1)hsetkeyfieldvalue#设置hashkey对应的field......