Python中可变数据类型和不可变数据类型
首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型。可变数据类型:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。
用一句话来概括上述过程就是:“python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
不可变数据类型代码示例:
a = 1
b = 1 def func():
c = 1
print(id(c)) func()
print(id(a)," ",id(b))
#打印的三个id 都是一样的 b = 3
print(id(b)) #当b的值改变后,id值就改变了
可变数据类型代码示例:
a = [1,2,3]
print(id(a)) a.append(5)
print(id(a)) #修改列表后打印的值还是一眼的
对于全局可变数据类型,函数内部是直接可以修改和查看的:
a = [1,2,3,4,5] def func():
a[3] = 8 #对于可变数据类型,可以在函数内部直接修改 func()
print(a)
对于不可变数据类型,在函数内部只能查看不能直接修改,如果要修改,需要借助于 global 声明:
示例1:
a = 1
def func():
print(a) #可以查看
a += 1 #但是不能直接修改外部全局变量 这一句报错
func()
示例2:(修改示例1)
a = 1
def func():
global a
print(a)
a += 1
func()
print(a) #a 的值已经被改变
Python中可变数据类型和不可变数据类型的更多相关文章
- 简单谈谈Python中的几种常见的数据类型
简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...
- Python中函数的参数传递与可变长参数
转自旭东的博客原文 Python中函数的参数传递与可变长参数 Python中传递参数有以下几种类型: (1)像C++一样的默认缺省函数 (2)根据参数名传参数 (3)可变长度参数 示例如下: (1)默 ...
- Python中比较特殊的几种数据类型list、tuple、dict、set
list list(列表)是Python内置的一种数据类型,它是一种有序.可变的集合,可以随时添加和删除其中的元素. >>> classmates = ['Li', 'Tom', ' ...
- python中的引用传递,可变对象,不可变对象,list注意点
python中的引用传递 首先必须理解的是,python中一切的传递都是引用(地址),无论是赋值还是函数调用,不存在值传递. 可变对象和不可变对象 python变量保存的是对象的引用,这个引用指向堆内 ...
- python中 使用join()方法 对各种数据类型中元的素进行合并拼接
"连接符".join(列表或元组或字符串或字典) 返回的是一个使用连接符进行拼接的字符串 如果对象是列表,元组,就是以一个下标元素为单位进行拼接 如果对象是字符串,就是一个单词元素 ...
- Python中的几种数据类型
大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"hello" ...
- (四)Python中的“四大才子”(字符串、列表、字典、集合)
前戏:在python中把数据序列分为可变(mutable)和不可变(immutable)两种 不可变:string.int.float.tuple 特点:相同对象只是占用一个内存地址,不管有多少个变量 ...
- python中的集合
在python中,普通集合是可变数据类型 通过以下案例说明: >>> s = {1, 2, 3, 4} >>> id(s) 2108634636808 >&g ...
- python中的元组
在python中,元组是不可变类型 可通过以下案例说明: >>> c1 = ['1','2'] >>> c = (1,2,c1) >>> c (1 ...
- python中的字符串
一.在python中,字符串是不可变类型 通过以下代码说明: >>> s = 'hello, world' >>> id(s) 2108634288304 > ...
随机推荐
- webpack学习(三)html-webpack-plugin插件
一.html-webpack-plugin插件 简单创建 HTML 文件,用于服务器访问 例如:我们要为输出文件添加哈希值标记,避免老的不变的文件重新加载,避免新修改的文件受缓存影响. 在前后两次在终 ...
- 20140316 曼联VS利物浦,罗杰斯的小九九,当4312对上4231
一.预测的阵式!? 赛前看fourfourtwo,Whoscored的首发预测,楼主立刻意淫了阵式图,并且大言不惭在微博贴了当晚的热战区域(上图的左侧),并疑惑着,格伦·囧森打左后卫,那这……显然是逼 ...
- BZOJ2301:[HAOI2011]Problem b(莫比乌斯反演,容斥)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- Hibernate之CRUD实践
Hibernate作为一个高度封装的持久层框架,曾经是非常牛逼的,现在虽然应用不是特别广,比如我前公司主要是做OA的,应用的框架就是Spring+SpringMVC+Hibernate. Hibern ...
- angular.js和ionic框架搭建一个webApp
原文地址:http://www.jianshu.com/p/ea0dcf1d31c9
- Kernel Ridge Regression
回顾一下岭回归,岭回归的目的是学习得到特征和因变量之间的映射关系,由于特征可能很高维,所以需要正则化 岭回归的目标函数是 $$ \sum_{i=1}^n \left\|y-X\beta\right\| ...
- 学习openGL-windows环境配置
windows对openGL的支持直到1.1,而如今openGL版本已经更新到4.5,为了使用高版本的API,需要安装拓展库(glew). openGL只是个渲染系统,但是它不能产生窗口,需要依赖其它 ...
- 记一次重装系统后恢复EFS加密文件过程
之前用了8年的win7系统被我删注册表给折腾挂了, 无法进入系统, 无法进入安全模式, 无法使用光盘修复 只能重装系统,习惯性的重装前GHOST备份了一下 今天忽然发现有好几个项目文件居然成了绿色的, ...
- 二十二、详述 IntelliJ IDEA 中恢复代码的方法
在咱们正常开发项目的时候,难免遇到在开发过程中由于某种原因,想要将代码恢复到前一版本的情景.特别是在咱们删除了某些代码,想要恢复之前删除的代码的时候,了解这个在 IntelliJ IDEA 中恢复代码 ...
- Redis(RedisTemplate)使用hash哈希
RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html package com.wbg.springRedis.test ...