python的可变类型和不可变类型

这篇具有很好参考价值的文章主要介绍了python的可变类型和不可变类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 解释

1.1 不可变类型

​ 在id不变的情况下,value可以改变

​ 在熟知的类型中,整数,浮点数,复数,布尔值,字符串,元组和冻结集合属于不可变类型

​ 对不可类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象

1.2 可变类型

​ value一旦改变,id也跟着改变

​ 在熟知的类型中,列表,字典,集合属于可变类型

2. 举例

会通过大量的例子来帮助自己记忆。文章来源地址https://www.toymoban.com/news/detail-647883.html

2.1 不可变类型举例

2.1.1 数字举例

# 数字举例
a = 11
print(id(a))
a +=1
print(id(a))
# 140729053930600

# 140729053930664

2.1.2 字符串举例

# 字符串举例
str1 = 'abcdef'
print(f'{str1} id = {id(str1)}')
str1 = str1[4:]
str1 += 'hello world'
print(f'{str1} id = {id(str1)}')

2.1.3 元组举例

# 元组
# 在 Python 中,元组是一种不可变序列,即元组一旦被创建就不能更改它的内容。这表明在原有的元组上新增元素是不允许的
my_tuple = (1,2,3,4)
my_tuple1 = my_tuple
print(f'value = {my_tuple}, id = {id(my_tuple)}')
print(f'value1 = {my_tuple1}, id = {id(my_tuple1)}')

# 通过+ 将旧有元组与需要添加的值拼接形成新的元组
my_tuple = my_tuple + (11,22)
print(f'value = {my_tuple}, id = {id(my_tuple)}')

# 通过*解包旧有元组,然后和新的元素组成新的元组
my_tuple = (*my_tuple, 33)
print(f'value = {my_tuple}, id = {id(my_tuple)}')

# 值发生改变同时id也发生改变。

2.1.4 冻结集合举例

# 冻结集合
# 冻结集合是不可变的,冻结集合在被定义后我们就不能再修改里面的元素了。冻结集合除了不能修改元素以外,其他的性质和集合一样。
my_f_set = frozenset(range(3))
print(f'value={my_f_set},id={id(my_f_set)}')
# 冻结集合的其它操作就不介绍了

2.2 可变类型举例

2.2.1 列表举例

# 列表
# 列表是一个可以包含任何类型数据的有序集合,比如数字、字符串甚至是其他列表。
# 列表是可变的,也就是说你可以改变一个列表的内容。
# 创建一个列表很简单,只需要将一些值用逗号隔开,然后用方括号括起来即可
# 常用的三种列表的创建方式
my_list = [1,2,3,4]
my_list1 = list(range(5))
my_list2 = [x for x in range(3)]
print(f'value = {my_list}, id = {id(my_list)}')
my_list.insert(0,11)
print(f'value = {my_list}, id = {id(my_list)}')
my_list.append(22)
print(f'value = {my_list}, id = {id(my_list)}')
my_list.remove(11)
print(f'value = {my_list}, id = {id(my_list)}')

# 可以看到我们向列表添加元素和删除元素(改变列表的内容),id均未发生变化
# value = [1, 2, 3, 4], id = 1181715063808
# value = [11, 1, 2, 3, 4], id = 1181715063808
# value = [11, 1, 2, 3, 4, 22], id = 1181715063808
# value = [1, 2, 3, 4, 22], id = 1181715063808

2.1.2 字典举例

# 字典
# 字典是python当中的一种数据类型,字典内部是一个一对一映射的数据关系。
import itertools
my_dict = {'1':1, '2':2}
my_dict1 = {x:x**2 for x in range(4)}
my_dict2 = dict(zip([1,2,3,4,5],[chr(x) for x in range(97,102)]))
my_dict3 = dict(itertools.product(range(3), range(3)))
print(f'value = {my_dict}')
print(f'value = {my_dict1}')
print(f'value = {my_dict2}')
print(f'value = {my_dict3}')
print(f'value = {my_dict},id = {id(my_dict)}')
my_dict['key'] = 'value'
print(f'value = {my_dict},id = {id(my_dict)}')

del my_dict['1']
print(f'value = {my_dict},id = {id(my_dict)}')

# 我们往字典里添加元素和从字典里删除元素,字典的id均未发生改变
# value = {'1': 1, '2': 2}
# value = {0: 0, 1: 1, 2: 4, 3: 9}
# value = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
# value = {0: 2, 1: 2, 2: 2}
# value = {'1': 1, '2': 2},id = 1497832590976
# value = {'1': 1, '2': 2, 'key': 'value'},id = 1497832590976
# value = {'2': 2, 'key': 'value'},id = 1497832590976

2.1.3 集合举例

# 集合
# 集合是python当中一种无序的、不重复的数据序列

my_set = {1,2,3,4}
my_set1 = set(range(5))
print(f'value = {my_set}')
print(f'value = {my_set1}')

print(f'value = {my_set}, id = {id(my_set)}')
my_set.add(12)
print(f'value = {my_set}, id = {id(my_set)}')

my_set.remove(12)
print(f'value = {my_set}, id = {id(my_set)}')

# value = {1, 2, 3, 4}
# value = {0, 1, 2, 3, 4}
# value = {1, 2, 3, 4}, id = 2059410018752
# value = {1, 2, 3, 4, 12}, id = 2059410018752
# value = {1, 2, 3, 4}, id = 2059410018752

2.1.4 可变类型参数

# 不可变类型参数
# 函数内部修改参数的值,只是修改另一个复制对象,不会影响变量本身
# 可变类型参数
# 函数将实参本体传递过去,修改后函数外部的变量也会受到影响

def my_func(list1:list,dict1:dict, set1:set):
    list1.pop()
    dict1.pop(1)
    set1.remove(22)

def my_func1(list1:list,dict1:dict, set1:set):
    list1 = list1[1:]
    dict1 = dict(zip(range(3),range(3)))
    set1 = set(range(3))    
my_list = list(range(4))
my_dict = {x:x**2 for x in range(1,4)}
my_set = set(range(20,24))

print(f'value = {my_list}, id = {id(my_list)}')
print(f'value = {my_dict}, id = {id(my_dict)}')
print(f'value = {my_set}, id = {id(my_set)}')

my_func(my_list, my_dict, my_set)
print(f'value1 = {my_list}, id = {id(my_list)}')
print(f'value1 = {my_dict}, id = {id(my_dict)}')
print(f'value1 = {my_set}, id = {id(my_set)}')

# 这样操作,没有影响到外面
# 尝试这样解释,由于在函数内使用了等号,相当远新建了一个变量,而局部变量在函数结束时就已经无了
my_func1(my_list, my_dict, my_set)
print(f'value2 = {my_list}, id = {id(my_list)}')
print(f'value2 = {my_dict}, id = {id(my_dict)}')
print(f'value2 = {my_set}, id = {id(my_set)}')

# value = [0, 1, 2, 3], id = 3112078428416
# value = {1: 1, 2: 4, 3: 9}, id = 3112077352960
# value = {20, 21, 22, 23}, id = 3112078346944
# value1 = [0, 1, 2], id = 3112078428416
# value1 = {2: 4, 3: 9}, id = 3112077352960
# value1 = {20, 21, 23}, id = 3112078346944
# value2 = [0, 1, 2], id = 3112078428416
# value2 = {2: 4, 3: 9}, id = 3112077352960
# value2 = {20, 21, 23}, id = 3112078346944

到了这里,关于python的可变类型和不可变类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • css3实现图片瀑布流,根据屏幕大小列可变和不可变的的瀑布流

    前提是每张图片宽度要设置成一样,准备15张图测试 1.屏幕大小列可变column实现,设置默认每列的图片宽度 2.屏幕大小列可变2 @media来控制 3.不可变-屏幕大小列不可变 4.不可变-屏幕大小列不可变 5.可变-可变js来实现-屏幕大小列可变

    2024年02月08日
    浏览(41)
  • Python学习笔记_基础篇(三)_数据类型之列表

    一.基本数据类型 整数:int 字符串:str(注:t等于一个tab键) 布尔值: bool 列表:list (元素的集合) 列表用[] 元祖:tuple 元祖用() 字典:dict 注:所有的数据类型都存在想对应的类列里 二.列表所有数据类型: 基本操作: 索引 切片 追加 删除 长度 切片 循环 包含 list 三

    2024年02月12日
    浏览(45)
  • python教程 入门学习笔记 第4天 数据类型 获取数据类型 字符串拼接

    数据类型 1、能直接处理的基本数据类型有5个:整型、浮点型、字符串、布尔值、空 1)整型(int)=整数,例如0至9,-1至-9,100,-8180等,人数、年龄、页码、门牌号等 没有小数位的数字,是整型 2)浮点型(float)=小数,例如金额、身高、体重、距离、长度、π等 精确到小

    2024年02月14日
    浏览(54)
  • Python学习笔记(2)--字面量,注释,变量,数据类型,数据类型转换,标识符,运算符

    传送门==B站黑马python入门教程 1.字面量 字面量 : 代码中被固定写的值 python常用的6种数据类型为 数字,字符串,列表,元组,集合,字典 目前基础部分学习 字符串,整数,浮点数 即可 字符串 :(文本),由任意数量的 字符 (示例:中文/英文/各类符号/数组)组成; 在 python 中,字符串需要用双

    2024年02月11日
    浏览(66)
  • python教程 入门学习笔记 第6天 数据类型转换 字符串转换成数值 数值之间互转 其它类型转字符串

    s1=\\\"188\\\" #字符串 ns1=int(s1) #转换成整型数值 print(ns1+8) #打印数值结果 s1=\\\"3.14\\\" #字符串 ns1=float(s1) #转换成浮点型数值 print(ns1+3) #打印数值结果(数值结果为6.140000000000001,出现误差,后面讲解决办法) print(type(ns1)) #获取新数值的数据类型属性 z1=78 nz1=float(z1) print(nz1) #打印结果

    2024年02月14日
    浏览(75)
  • [学习笔记]python的web开发全家桶(ing)

    源学习视频 目的:开发一个平台(网站) 前端开发:HTML、CSS、JavaScript Web框架:接收请求并处理 MySQL数据库:存储数据地方 快速上手: 基于Flask Web框架让你快速搭建一个网站出来。 深入学习: 基于Django框架(主要) 老师在P2的26分22秒使用的画图软件是Excalidraw 2.4.1 div和span div

    2024年02月04日
    浏览(61)
  • 《使用Unreal Engine Python插件进行UE4中的Python开发》学习笔记1

    ·本文为B站系列教学视频 《使用 UnrealEnginPython 插件进行UE4中的Python开发》 ——《 Day 01 初识 UnrealEnginePython 》的学习笔记,UP主为腾讯游戏策划、虚幻社区贡献者 世欺子。 本节课对基于虚幻引擎( Unreal Engine )的 Python 集成开发插件 UnrealEnginePython 进行简要介绍,接着在虚幻

    2024年04月11日
    浏览(67)
  • Python爬虫学习笔记:1688商品详情API 开发API接口文档

      1688API接口是阿里巴巴集团推出的一种开放平台,提供了丰富的数据接口、转换工具以及开发资源,为开发者提供了通用的应用接口及大量数据资源,支持开发者在1688上进行商品搜索、订单管理、交易报表及物流等方面的操作。 1688API接口主要包含以下几类: 商品API:提供

    2024年02月16日
    浏览(42)
  • C语言——自定义类型结构体_学习笔记

    结构体是一种用户自定义的数据类型,可以包含 多个不同类型的变量 。通过使用结构体,我们可以将相关联的数据组织在一起,便于管理和使用。 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型的一类。 结构体可以包含多个不同类型的数据成员,例

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包