python中的不可变数据类型与可变数据类型详解

作者:自由早晚乱余生 时间:2022-12-27 21:56:24 

前言

python与C/C++不一样,它的变量使用有自己的特点,当初学python的时候,一定要记住“一切皆为对象,一切皆为对象的引用”这句话,其实这个特点类似于JAVA,所以在python里面大家也不用担心类似于C/C++中的指针的复杂问题, 在python中数据分为可变数据类型,不可变数据类型。

所以在学习python过程中我们一定会遇到不可变数据类型和可变数据类型。下面话不多说了,来一起看看详细的介绍吧

1.名词解释

以下所有的内容都是基于内存地址来说的。

  • 不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。

  • 可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。

总结:不可变数据类型更改后地址发生改变,可变数据类型更改地址不发生改变

2.数据类型分类

在python中数据类型有:整型,字符串,元组,集合,列表,字典。接下来我们用例子来一一查看他们分别属于不可变数据类型还是可变数据类型。

2.1 整型


a = 1
print(id(a),type(a))
a = 2
print(id(a),type(a))

1912499232 <class 'int'>
1912499264 <class 'int'>

我们可以发现,当数据发生改变后,变量的内存地址发生了改变,那么整型就是不可变数据类型。

2.2 字符串


b = 'djx'
print(id(b),type(b))
b = 'djx1996'
print(id(b),type(b))

535056476344 <class 'str'>
535056476624 <class 'str'>

我们可以发现,当数据发生改变后,变量的内存地址发生了改变,那么字符串就是不可变数据类型。

2.3 元组

元组被称为只读列表,即数据可以被查询,但不能被修改,但是我们可以在元组的元素中存放一个列表,通过更改列表的值来查看元组是属于可变还是不可变。


c1 = ['1','2']
c = (1,2,c1)
print(c,id(c),type(c))
c1[1] = 'djx'
print(c,id(c),type(c))

result:
(1, 2, ['1', '2']) 386030735432 <class 'tuple'>
(1, 2, ['1', 'djx']) 386030735432 <class 'tuple'>

我们可以发现,虽然元组数据发生改变,但是内存地址没有发生了改变,但是我们不可以以此来判定元组就是可变数据类型。我们回头仔细想想元组的定义就是不可变的。我们修改了元组中列表的值,但是因为列表是可变数据类型,所以虽然在列表中更改了值,但是列表的地址没有改变,列表在元组中的地址的值没有改变,所以也就意味着元组没有发生变化。我们就可以认为元组是不可变数据类型,因为元组是不可变的。

2.4 集合

集合我们常用来进行去重和关系运算,集合是无序的。


s = {1,'d','34','1',1}
print(s,type(s),id(s))
s.add('djx')
print(s,type(s),id(s))

result:
{'d', 1, '34', '1'} <class 'set'> 870405285032
{1, '34', 'djx', '1', 'd'} <class 'set'> 870405285032

我们可以发现,虽然集合数据发生改变,但是内存地址没有发生了改变,那么集合就是可变数据类型。

2.5 列表

列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,它是以[]括起来,每个元素以逗号隔开,而且它里面可以存放各种数据类型。


list = [1,'q','qwer',True]
print(list,type(list),id(list))
list.append('djx')
print(list,type(list),id(list))

result:
[1, 'q', 'qwer', True] <class 'list'> 808140621128
[1, 'q', 'qwer', True, 'djx'] <class 'list'> 808140621128

我们可以发现,虽然列表数据发生改变,但是内存地址没有发生了改变,那么列表就是可变数据类型。

2.6 字典

字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的。但是在3.6版本后,字典开始是有序的,这是新的版本特征。

字典的key值可以是整型,字符串,元组,但是不可以是列表,集合,字典。


tuple = (1)
dic = {1:2}
d = { tuple:1,'key2':'djx','key3':'li'}
print(d,type(d),id(d))
d['key4'] = 'haha'
print(d,type(d),id(d))

result:
{1: 1, 'key2': 'djx', 'key3': 'li'} <class 'dict'> 256310956320
{1: 1, 'key2': 'djx', 'key3': 'li', 'key4': 'haha'} <class 'dict'> 256310956320

我们可以发现,虽然字典数据发生改变,但是内存地址没有发生了改变,那么字典就是可变数据类型。

数据类型可变/不可变
整型不可变
字符串不可变
元组不可变
列表可变
集合可变
字典可变

来源:https://www.cnblogs.com/operationhome/p/9642460.html

标签:python,不可变数据类型,可变数据类型
0
投稿

猜你喜欢

  • ASP 连接mysql信息(strConnString)

    2009-10-29 12:02:00
  • pytest之assert断言的具体使用

    2021-11-21 18:04:26
  • Go http请求排队处理实战示例

    2024-05-21 10:26:58
  • 利用python实现汉诺塔游戏

    2021-02-19 03:03:45
  • 初窥交互设计

    2009-10-10 10:52:00
  • 关于vue中的时间格式转化问题

    2024-05-13 09:44:07
  • sql server自动生成拼音首字母的函数

    2024-01-25 15:27:19
  • 不用mod_rewrite直接用php实现伪静态化页面代码

    2023-11-01 07:07:45
  • Python tkinter三种布局实例详解

    2022-11-28 11:23:44
  • Python实现获取nginx服务器ip及流量统计信息功能示例

    2023-08-03 02:03:26
  • 关于Numpy中的行向量和列向量详解

    2021-06-29 20:30:48
  • 利用Python如何实现一个小说网站雏形

    2023-09-22 05:52:07
  • Python-OpenCV实现图像缺陷检测的实例

    2023-02-16 19:38:46
  • Web开发与JavaScript编辑利器——Aptana Studio简介

    2008-05-05 13:32:00
  • python中format的用法实例详解

    2023-08-03 12:27:28
  • 详解Selenium+PhantomJS+python简单实现爬虫的功能

    2023-03-09 01:09:00
  • Python3 ffmpeg视频转换工具使用方法解析

    2021-07-28 15:00:30
  • Jinja2过滤器的使用、控制语句示例详解

    2023-01-30 19:02:00
  • asp读取xml实例代码

    2011-03-08 11:13:00
  • Python正则表达式实现简易计算器功能示例

    2021-03-24 16:11:43
  • asp之家 网络编程 m.aspxhome.com