Python——可变和不可变类型数据
什么是不可变类型?
存储空间保存的数据不允许被修改,这种数据就是不可变类型。
常见的不可变类型有:
- 数字类型 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——可变和不可变类型数据的更多相关文章
- python基础知识五 各类型数据方法补充,转换,分类,编码+坑中菜
3.9各类型数据方法补充,转换,分类,编码,坑中菜 3.9.1数据类型方法补充 1.str:不可变 补充方法 s1.capitalize():首字母大写 s1 = "alex" s ...
- [python] 查询mysql返回datetime类型数据的处理
Python 查询Mysql,如果是datetime类型,在json序列化的时候会出现问题. 在网上查了一下,解决方案基本都是遍历dict数据,如果是datetime则转化为字符串. from dat ...
- 分享一个Python脚本--统计redis key类型数据大小分布
概述 今天主要介绍怎么统计redis key类型数据大小分布. 原理:使用redis命令: scan.pipline.type 和 debug object 来得到 redis key 信息. 脚本 ...
- python中可变类型和不可变类型数据的复制
常见的复制方式有以下5种第1种:通过等号[=]复制 - 不论可变还是不可变数据类型,通过[=]复制后都指向同一个内存地址: - 改变复制后的数据(例子中的anotherStr,anotherList) ...
- Python中的不可变对象类型与可变对象类型
https://blog.csdn.net/answer3lin/article/details/86430074 其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++ ...
- python基础之pip、.pyc、三元运算、进制、一切皆对象、可变与不可变类型
一.pip(下载工具==yum) 1.重点(必须掌握的) 列出已安装的包 pip list 安装要安装的包 pip install xxx 安装特定版本 pip install django==1.1 ...
- 可变与不可变类型数据,列表的copy方法
我们先来了解一下可变与不可变类型的数据 (1)可变类型:列表,字典(内存中的数据允许被修改) 不可变类型:数字,字符串,元组(内存中的数据不允许被修改) 接着我们通过一个实例来看一看可变与不可变类型数 ...
- Python编程Day5——可变与不可变类型、数据类型整合
一.可变与不可变类型1.可变类原值型:只改变,但id不变,证明就是在改变原值,是可变类型2.不可变类型:值改变,但id也跟着改变,证明是产生了新的值,是不可变类型 x= print(id(x)) x= ...
- Python可变与不可变类型及垃圾回收机制
1. 可变与不可变类型 1.1 可变类型 在id不变的情况下,value可以改变,则称之为可变类型.列表.字典与集合是可变的. l1 = [,,,,] print(id(l1)) l1[] = #改 ...
随机推荐
- ubuntu16.04 双网卡绑定
ubuntu 16.04 双网卡绑定仅仅需要配置/etc/network/interfaces 添加标记内容即可 apt-get install ifenslave 默认已经安装
- 前端自动化之webstrom
前端自动化之webstrom 在刚接触前端的时候,使用的就一直是webstrom,版本是webstrom 8. 前端自动画使用的时候,因为webstrom 8版本是没有集成gulp的.所以每次使用都默 ...
- laravel Redis缓存
首先在app/config/cache.php配置文件下改变一下缓存的驱动方式改为redis composer require predis/predis 先安装conposer的扩展安装包 然后在c ...
- 面试题:JVM类加载机制详解(一)JVM类加载过程 背1
首先Throws(抛出)几个自己学习过程中一直疑惑的问题: 1.什么是类加载?什么时候进行类加载? 2.什么是类初始化?什么时候进行类初始化? 3.什么时候会为变量分配内存? 4.什么时候会为变量赋默 ...
- 显著水平alpha
http://blog.minitab.com/blog/adventures-in-statistics-2/understanding-hypothesis-tests:-significance ...
- Python3 网络爬虫开发实战学习弱点书签
1. urllib.robotparse模块对robot.txt文件的解析,can_fetch()方法和parse()方法. Page121 2. lxml.etree模块自动补全Html代码,Htm ...
- C#将DataTable数据导出到EXCEL的两种方法
1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...
- M(必备),R(需求),C(条件),O(可选)
M:must 必备 R:request 需求 C:condition 条件 O:option 可选 AFL:application file locator 应用文件定位器 PKI:公钥索引 IPK: ...
- html页面源代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- easyUI form sumit 中文乱码
jsp 编码方式: pageEncoding="UTF-8" tomcat 编码方式: <Connector connectionTimeout="20000&qu ...