Python基础--可变数据类型与不可变数据类型

可变数据类型与不可变数据类型

Python的数据类型主要分为可变数据类型与不可变数据类型,这两种都分别包含了哪些数据类型又各自有什么特点呢我们下边意义介绍;

  • 不可变数据类型:数字、字符串、元组是不可变的
  • 可变数据类型:列表、字典是可变的;

不可变数据类型举例

对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)

i = 5
i += 1
print(i)
#不可变类型以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象;
#通过id函数查看变量i的内存地址进行验证(使用hex(id(i)) 可以查看16进制的内存地址)

id(i)
>>>140243713967984
i += 1
print(i)
>>>7
id(i)
>>>140243713967960
#可以看到执行 i += 1 时内存地址都会变化,因为int 类型是不可变的;

#再改改代码,但多个int类型的变量值相同时,看看它们内存地址是否相同。
i = 5
j = 5
id(i)
>>> 140656970352216
id(j)
>>> 140656970352216
k = 5
id(k)
>>> 140656970352216
x = 6
id(x)
>>> 140656970352192
y = 6
id(y)
>>> 140656970352192
z = 6
id(z)
>>> 140656970352192

对于不可变类型int,无论创建多少个不可变类型,只要值相同,都指向同个内存地址。同样情况的还有比较短的字符串;

对于其他类型则不同,以浮点类型为例,从代码运行结果可以看出它是个不可变类型:对i的值进行修改后,指向新的内存地址;

>>> i = 1.5
>>> id(i)
140675668569024
>>> i = i + 1.7
>>> i
3.2
>>> id(i)
140675668568976
#修改代码声明两个相同值的浮点型变量,查看它们的id,发现它们并不是指向同个内存地址,这点和int类型不同(这方面涉及Python内存管理机制,Python对int类型和较短的字符串进行了缓存,无论声明多少个值相同的变量,实际上都指向同个内存地址。)
i = 2.5
id(i)
>>>140564351733040
j = 2.5
id(j)
>>> 140564351733016

可变数据类型举例

可变类型的话以list为例,list在append之后,还是指向同个内存地址,因为list是可变类型可以在原处修改

那么这是为什么呢,其实a = [1,2,3] 这么一个列表在内存中开辟了一块空间存储的是a = 列表的内存地址并不是具体的元素;

而这个列表的内存地址里存储的是元素的内存地址,所以无论在列表内存中增加多少个元素都不会受到影响;

a = [1, 2, 3]
id(a)
>>>4385327224
a.append(4)
id(a)
>>>4385327224

#当存在多个值相同的不可变类型变量时,看看它们是不是跟可变类型一样指向同个内存地址
a = [1, 2, 3]
id(a)
>>>4435060856
b = [1, 2, 3]
id(b)
>>>4435102392

#从运行结果可以看出虽然a、b的值相同,但是指向的内存地址不同,我们也可以通过b = a 的赋值语句,让他们指向同个内存地址;
a = [1, 2, 3]
id(a)
>>> 4435060856
b = [1, 2, 3]
id(b)
>>> 4435102392
b = a
id(b)
>>>4435060856

#这个时候需要注意,因为a、b指向同个内存地址,而a、b的类型都是List,可变类型,对a、b任意一个List进行修改,都会影响另外一个List的值。
b.append(4)
print(a)
[1, 2, 3, 4]
print(b)
[1, 2, 3, 4]
id(a)
>>>4435060856
id(b)
>>>4435060856

原文地址:https://www.cnblogs.com/olingrobin/p/10174249.html

时间: 2024-08-29 07:13:15

Python基础--可变数据类型与不可变数据类型的相关文章

python基础系列(二)----各数据类型的详细方法描述

python基础 一.整数 1 class int(object): 2 """ 3 int(x=0) -> int or long 4 int(x, base=10) -> int or long 5 6 Convert a number or string to an integer, or return 0 if no arguments 7 are given. If x is floating point, the conversion truncate

Python基础编程之字符编码、数据类型、列表

目录: python简介 字符编码介绍 数据类型 一.Python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者. python的发展历史 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器. 1991年,第一个Pyt

python基础学习之路No.2 数据类型

python中常见的数据类型有:整数.浮点数.字符串.列表.元组.字典 python相较其他语言,可以省略了声明,可以直接定义赋值使用. 例如: a=12 就相当于 其他语言中的  int a=12  省略的声明数据类型的int ?下面举例定义各类型的变量: 1.定义一个整数(int) a = 1 2.定义一个浮点型(float) b = 1.2 3.定义一个字符串(string) c = "hello"   (注:python中没有单引号双引号的区分,即还可写成:c = 'hello

Python基础(变量、字符编码、数据类型)

变量 变量名由字母.数字(不能为首字符).下划线组成,不能使用关键字 以下关键字不能声明为变量名 ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'pri

python基础3

一.pyc文件 1.前提 编写auth.py模块,新建test.py文件引用auth.py文件--运行test.py文件之后会生成auth.pyc文件 不同版本的区别 python2:生成的__pycache__ 文件夹.ahtu.pyc文件 python3:生成的pyc文件,名称修改为:auth.cpython-35.pyc,并且是直接在__pycache__ 文件夹里面的           2.python是一门解释型语言? 我初学python时,听到的关于python的第一句话就是,py

python基础--基本数据类型(Tuple(元组)--不可变数据)

python基础--基本数据类型(Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典)) Python3 中有六个标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Sets(集合)Dictionary(字典) Python3 的六个标准数据类型中:不可变数据(四个):Number(数字).String(字符串).Tuple(元组).Sets(集合):可变数据(两个):List(

python基础--基本数据类型(List(列表)--可变数据)

python基础--基本数据类型(Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典)) Python3 中有六个标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Sets(集合)Dictionary(字典) Python3 的六个标准数据类型中:不可变数据(四个):Number(数字).String(字符串).Tuple(元组).Sets(集合):可变数据(两个):List(

Python基础之二:数据类型

四.Python数据类型 数字 字符串 列表 元祖 字典 1.数字类型 整型 表示范围:-2147483648到2147483647,超过该范围的会被当作长整型 示例:num=123 type(num)-返回<type 'int'>,用来测试变量的类型 长整型 表示范围:任意大整数,后跟L或l与整型区别 示例:num=1l type(num)-返回<type 'long'> 浮点型 示例:num=12.0 type(num) -返回<type'float'> 复数型 示

Python成长之路【第二篇】Python基础之数据类型

阅读目录 简介 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 数字(整形,长整形,浮点型,复数) 字符串 列表 元组 字典 集合 4 如何学习 #一:基本使用 1 用途 2 定义方式 3 常用操作+内置的方法 #二:该类型总结 1 存一个值or存多个值 只能存一个值 可以存多个值,值都可以是什么类型 2 有序or无序 3 可变or不可变 !!!可变:值变,id不变.可变==不可hash