什么是不可变类型?

存储空间保存的数据不允许被修改,这种数据就是不可变类型。

常见的不可变类型有:

  • 数字类型 int, bool, float, complex, long(2.x)
  • 字符串 str
  • 元组 tuple

什么是可变类型?

存储空间保存的数据允许被修改,这种数据就是可变类型。

常见的可变类型有:

  • 列表 list
  • 字典 dict

***需要注意,可变类型通过方便改变数据才是修改内存中的数据,使用赋值”=”号并不是修改内存中的数据,而是开辟出一块新的空间来存放新的数据。

两个实例:

 demo_list = [1, 2, 3]

 print("定义列表后的内存地址 %d" % id(demo_list))

 demo_list.append(999)
demo_list.pop(0)
demo_list.remove(2)
demo_list[0] = 10 print("修改数据后的内存地址 %d" % id(demo_list)) demo_dict = {"name": "小明"} print("定义字典后的内存地址 %d" % id(demo_dict)) demo_dict["age"] = 18
demo_dict.pop("name")
demo_dict["name"] = "老王" print("修改数据后的内存地址 %d" % id(demo_dict))

输出结果:

定义列表后的内存地址 2574756635272

修改数据后的内存地址 2574756635272

定义字典后的内存地址 2574760169336

修改数据后的内存地址 2574760169336

*可见通过方法来修改的字典或者列表,其内存地址是不变了,也说明了字典列表是可变的。

 a = 1
print(id(a))
a = "hello"
print(id(a))
a = [1, 2, 3]
print(id(a))
a = [3, 2, 1]
print(id(a))

输出结果:

140714386514768

2214895252792

2214894789256

2214894789320

*说明‘=‘赋值运算符是重新为变量指向一个新的内存地址,而不是修改原来内存的数据,注意与上例区别好。


字典的key与哈希

字典的键必须是不可变类型数据,而值则可以是任意类型的数据。

这是因为不可变类型的数据才会有哈希值,而字典的键必须要有对应的哈希值。

Python中有一个内置函数hash(o)可以接受一个不可变类型数据作为参数,返回一个整数,这个整数可以看成是该数据的特征码,因此,相同的数据内容得到相同的整数,而不同的数据内容则得到不同的整数。

另外,由于列表是不可哈希类型的,因此决定了它的有序性,可重复性。

由于字典、集合是可哈希类型的,因此具有不可重复,无序性。

Python——可变和不可变类型数据的更多相关文章

  1. python基础知识五 各类型数据方法补充,转换,分类,编码+坑中菜

    3.9各类型数据方法补充,转换,分类,编码,坑中菜 3.9.1数据类型方法补充 1.str:不可变 补充方法 s1.capitalize():首字母大写 s1 = "alex" s ...

  2. [python] 查询mysql返回datetime类型数据的处理

    Python 查询Mysql,如果是datetime类型,在json序列化的时候会出现问题. 在网上查了一下,解决方案基本都是遍历dict数据,如果是datetime则转化为字符串. from dat ...

  3. 分享一个Python脚本--统计redis key类型数据大小分布

    概述 今天主要介绍怎么统计redis key类型数据大小分布. 原理:使用redis命令: scan.pipline.type 和 debug object 来得到 redis key 信息. 脚本 ...

  4. python中可变类型和不可变类型数据的复制

    常见的复制方式有以下5种第1种:通过等号[=]复制 - 不论可变还是不可变数据类型,通过[=]复制后都指向同一个内存地址: - 改变复制后的数据(例子中的anotherStr,anotherList) ...

  5. Python中的不可变对象类型与可变对象类型

    https://blog.csdn.net/answer3lin/article/details/86430074 其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++ ...

  6. python基础之pip、.pyc、三元运算、进制、一切皆对象、可变与不可变类型

    一.pip(下载工具==yum) 1.重点(必须掌握的) 列出已安装的包 pip list 安装要安装的包 pip install xxx 安装特定版本 pip install django==1.1 ...

  7. 可变与不可变类型数据,列表的copy方法

    我们先来了解一下可变与不可变类型的数据 (1)可变类型:列表,字典(内存中的数据允许被修改) 不可变类型:数字,字符串,元组(内存中的数据不允许被修改) 接着我们通过一个实例来看一看可变与不可变类型数 ...

  8. Python编程Day5——可变与不可变类型、数据类型整合

    一.可变与不可变类型1.可变类原值型:只改变,但id不变,证明就是在改变原值,是可变类型2.不可变类型:值改变,但id也跟着改变,证明是产生了新的值,是不可变类型 x= print(id(x)) x= ...

  9. Python可变与不可变类型及垃圾回收机制

    1. 可变与不可变类型 1.1  可变类型 在id不变的情况下,value可以改变,则称之为可变类型.列表.字典与集合是可变的. l1 = [,,,,] print(id(l1)) l1[] = #改 ...

随机推荐

  1. MSDE2000

    安装MSDE2000的时候,遇到的两个问题 sqlserver 小版本 SQL安装问题.系统说:为了安全,要求使用SA密码,请使用SAPWD开关提供同一密码

  2. Java中包、类、方法、属性、常量的命名规则

    1:包(package):用于将完成不同功能的类分门别类,放在不同的目录(包)下,包的命名规则:将公司域名反转作为包名.比如www.baidu.com 对于包名:每个字母都需要小写.比如:com.ba ...

  3. printf 的格式

    1) 类型类型字符用以表示输出数据的类型,其格式符和意义如下表所示: %c  输出单个字符 %s  输出字符串 %u  以十进制形式输出无符号整数 %d  以十进制形式输出带符号整数(正数不输出符号) ...

  4. Gym 101128 B Black Vienna

    题意 有A-Z 26张牌,现在从中抽出3张牌,并把剩下的23张牌分给选手1和2,现在有n次询问,每次询问一个选手是否有某两张牌,和选手的回答.回答说自己有这两张牌中的几张,问拿出的三张牌有多少种方案能 ...

  5. IDEA maven打包时跳过测试

    配置这个install -Dmaven.test.skip=true, 可以跳过business项目本地启动自动跑测试用例

  6. while 循环和do while循环

    while循环是先检测条件符合不符合,符合才执行循环体内容,不符合就跳过while循环. 就和一个房间有两个门,一个前门,一个后门,while循环是当你进入前门的时候有人会检查你的身份,只有身份符合条 ...

  7. 4.std::string中库函数的使用。

    为了美观,我们把输入和输出设计成如下: #include <iostream> #include <string> int main() { std::string name; ...

  8. pymysql模块使用---Python连接MySQL数据库

    pymysql模块使用---Python连接MySQL数据库 浏览目录 pymysql介绍 连接数据库 execute( ) 之 sql 注入 增删改查操作 进阶用法 一.pymysql介绍 1.介绍 ...

  9. 《the art of software testing》第六章

    更高级别的测试 模块测试的目的是发现程序模块与其接口规格说明之间的不一致 功能测试的目的是为了证明程序未能符合其外部规格说明 系统测试目的是为了证明软件产品与其初始目标不一致 功能测试,作者从三个方面 ...

  10. HDU 3724 Encoded Barcodes (Trie)

    题意:给n个字符串,给m个询问,每个询问给k个条形码.每个条形码由8个小码组成,每个小码有相应的宽度,已知一个条形码的宽度只有2种,宽的表示1,窄的表示0.并且宽的宽度是窄的宽度的2倍.由于扫描的时候 ...