首页 > 编程语言 >python可变类型与不可变类型

python可变类型与不可变类型

时间:2023-02-20 20:45:57浏览次数:38  
标签:python 数据类型 元组 print 可变 类型 type id

一、可变数据类型和不可变数据类型
可变和不可变都是基于内存地址来说的。

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

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

1、 整型(不可变)

>>> A = 1
>>> print(id(A),type(A))
140710074386096 <class \'int\'>
>>> A = 100
>>> print(id(A),type(A))
140710074389264 <class \'int\'>
可以发现,当数据发生改变后,变量的内存地址发生了改变,那整型就是不可变数据类型。

2、字符串(不可变)

>>> str1 = "hello"
>>> print(id(str1),type(str1))
2150342503216 <class \'str\'>
>>> str1 = "helloworld"
>>> print(id(str1),type(str1))
2150342503152 <class \'str\'>
可以发现,当数据发生改变后,变量的内存地址发生了改变,那字符串就是不可变数据类型。

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

>>> list1 = [1,2,3]
>>> tup1 = (1,2,list1)
>>> print(id(tup1),type(tup1))
2150342077440 <class \'tuple\'>
>>> list1[2] = 100
>>> print(id(tup1),type(tup1))
2150342077440 <class \'tuple\'>

我们可以发现,虽然元组数据发生改变,但是内存地址没有发生了改变,但是我们不可以以此来判定元组就是可变数据类型。

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

我们就可以认为元组是不可变数据类型,因为元组是不可变的。

4 、集合(可变)
集合我们常用来进行去重和关系运算,集合是无序的。

>>> s1 = {1,2,"hello","world"}
>>> print(id(s1),type(s1))
2150342489920 <class \'set\'>
>>> s1.add("tom")
>>> print(id(s1),type(s1))
2150342489920 <class \'set\'>
我们可以发现,虽然集合数据发生改变,但是内存地址没有发生了改变,那么集合就是可变数据类型。

5 、列表(可变)

>>> list1 = [23,45,12,"zs"]
>>> print(id(list1),type(list1))
2150342481344 <class \'list\'>
>>> list1.append("ls")
>>> print(id(list1),type(list1))
2150342481344 <class \'list\'>
我们可以发现,虽然列表数据发生改变,但是内存地址没有改变,那列表是可变数据类型。

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

>>> info = {\'name\': \'zhangsan\', \'age\': 100}
>>> print(id(info),type(info))
2150342011840 <class \'dict\'>
>>> info[\'age\'] = 12
>>> print(id(info),type(info))
2150342011840 <class \'dict\'>
我们可以发现,虽然字典数据发生改变,但是内存地址没有发生了改变,那么字典就是可变数据类型

标签:python,数据类型,元组,print,可变,类型,type,id
From: https://www.cnblogs.com/wangxianyun/p/17138855.html

相关文章

  • 数据类型-列表list-内置方法
    定义在[]内,用逗号分隔开多个任意数据类型的值l1=[1,'a',[1,2]]#本质:l1=list([1,'a',[1,2]])类型转换但凡能被for循环遍历的数据类型都可以传给list()转换成......
  • redis数据类型-string
    存储字符串类型的key-value形式常用场景验证码计数器重复提交:生成随机token,提交后token删除,token存在redis中复杂信息的序列化存储常用命令(https://try.redis.i......
  • python多种赋值方式
    一、链式赋值例1a=10b=10c=10d=10print(f'a:{a},b:{b},c:{c},d:{d}')输出a:10,b:10,c:10,d:10例2a=b=c=d=10print(f'a:{a},b:{b},c:......
  • Conda+VScode配置Python开发环境
    Conda配置与常用指令1、查看conda与Python相关信息查看Python路径wherepython查看conda版本conda--version查看conda详细信息condainfo2、换源更换为清华......
  • 细说python装饰器
    前言什么是装饰器实现原理实现效果适用场景装饰器:装饰器的写法装饰器的拓展装饰器的模板什么是装饰器呢?就是在特定条件下为某些函数再不改动函数体的时候为函数新添加一......
  • 这一次,Python 真的有望告别 GIL 锁了?
    Python中有一把著名的锁——全局解释器锁(GlobalInterpreterLock,简写GIL),它的作用是防止多个本地线程同时执行Python字节码,这会导致Python无法实现真正的多线程执行......
  • python内置装饰器
    python有三个内置装饰器:@property,@classmethod,@staticmethod(一)@property这是用来修饰类的方法的,可以把类的方法变成可直接读/写的属性 相当于get和set方法我们......
  • 数据类型-字符串-内置方法
    一、定义在单引号\双引号\三引号内包含一串字符name1='jason' #本质:name=str('任意形式内容')name2="lili" #本质:name=str("任意形式内容")name3=......
  • Python 学习02 内置数据类型
    ......
  • Yum系列系统升级python版本
    问题描述系统可能携带的是python3.6,而自动化开发基线是python3.7就会导致部分包无法使用等问题升级python3.7查看当前系统python版本ls-al/usr/bin|greppython......