首页
学习
活动
专区
工具
TVP
发布

Python - 可变和不可变对象

前置知识 在 Python 中,一切皆为对象 Python 中不存在值传递,一切传递的都是对象的引用,也可以认为是传址 有哪些可变对象,哪些不可变对象?...不可变对象:字符串、元组、数字(int、float) 可变对象:数组、字典、集合 不可变对象和可变对象的区别?...不可变对象 ?...Python 中的变量有一个内存空间 具体的数据(对象)也有一个内存空间 而变量保存(指向)的是存储数据(对象)的内存地址,一般也叫对象引用 不可变对象是指对象内容本身不可变 变的是:改变了值,会创建新对象...),当然值也是一样的啦 Python 函数的参数传递 这里先提前讲下函数的入门,因为参数传递是个挺重要的点 概念 开头有讲到,Python 的一切传递都是对象的引用,函数参数传递也例外 当传递给函数的是一个变量

1.2K40

Python可变对象和不可变对象

Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置。根据对象的值是否可修改分为可变对象和不可变对象。...其中, 不可对象包括:数字,字符串,tuple 可变对象包括:list,dict,set Python中的变量可以指向任意对象,可以将变量都看成是指针,保存了所指向对象的内存地址(对象的引用)。...不可变对象 对于不可变对象,如果要更新变量引用的不可变对象的值,会创建新的对象,改变对象的引用,举个例子: In [41]: x = 1 In [42]: y = x In [43]: print(...对于值为1或者2,不管几个引用指向它,内存中都只占用了一个地址,在Python内部会通过引用计数来记录指向该地址的引用个数,当引用个数为0时会进行垃圾回收。...注意,我们研究可变对象的变化,研究的是同一对象,也就是可变指的是append, +=这种操作,而不包括新的赋值操作,赋值操作是会新建一个对象的。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

Python入门之python可变对象与不可变对象

本文分为如下几个部分 概念 地址问题 作为函数参数 可变参数在类中使用 函数默认参数 类的实现上的差异 概念 可变对象与不可变对象的区别在于对象本身是否可变。...python内置的一些类型中 可变对象:list dict set 不可变对象:tuple string int float bool 举一个例子 # 可变对象 >>> a = [1, 2, 3] >>...3.总结 python中向函数传递参数只能是引用传递,表示把它的地址都传进去了,这才会带来上面的现象。...这是因为l = []是在函数定义时就确定下来的了,所以之后每次调用这个函数,使用的l都是同一个,如果指定这个参数的新值,就会出现上面这个问题。...这就要使用python的魔法方法,主要有两种方法 设置__setattr__直接抛出异常,即只要想设置属性值,就会抛出异常 设置__slot__限制属性的访问,如果属性都不能访问了,那就肯定不能修改 更细节的实现可以参考

81960

Python解惑之对象可变与不可变

接触过c, c++, c#, java, python, 这些语言除了c不具有强烈的这个(可变与不可变)色彩外,其他语言都存在这个性质。...这个系列是Python与数据分析,所以,今天我们重点拿Python语言来说说这个性质,其他语言类似。...Python中的不可变对象常见的: int float complex bool string tuple range frozenset bytes 可变对象常见的: list dict set bytearray...用户自定义的类(未特别声明为不可变对象) 由此可见,Python中常见的内置不可迭代的对象往往为不可变对象,但是也有例外,如frozenset;而可迭代对象往往是可变对象。...因为Python中函数或方法一旦创建完成后,下次再次调用它时,带有默认值的参数就不会再被重建。这种场景下也要格外注意。

71120

python新手学习可变和不可变对象

python中有可变对象和不可变对象,可变对象:list,dict.不可变对象有:int,string,float,tuple. python可变对象 int,string,float,tuple 先来看一个例子...但是上面我们说到了python中有可变类型和不可变类型,这样的话,当传过来的是可变类型(list,dict)时,我们在函数内部修改就会影响函数外部的变量。...总结: 在很多的其他语言中在传递参数的时候允许程序员选择值传递还是引用传递(比如c语言加上*号传递指针就是引用传递,而直接传递变量名就是值传递),而python只允许使用引用传递,但是它加上了可变类型和不可变类型...知识点扩展: Python可变对象与不可变对象原理解析 原理 可变对象:list dict set 不可变对象:tuple string int float bool 1. python不允许程序员选择采用传值还是传引用...到此这篇关于python新手学习可变和不可变对象的文章就介绍到这了,更多相关python可变对象和不可变对象内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn

66420

Python中的可变对象与不可变对象

Python中所有类型的值都是对象,这些对象分为可变对象与不可变对象两种: 不可变类型 float、int、str、tuple、bool、frozenset、bytes tuple自身不可变,但可能包含可变元素...,如:([3, 4, 5], 'tuple') 可变类型 list、dict、set、bytearray、自定义类型 +=操作符 +=操作符对应__iadd__魔法方法,对于不可变对象...在Python中,不可变对象,浅拷贝和深拷贝结果一样,都返回原对象: import copy ​ ​ t1 = (1, 2, 3) t2 = copy.copy(t1) t3 = copy.deepcopy...,这里name属性的地址一样 p3.id.name = "p3" print(p1.id.name) # 还是p2 Python中可使用以下几种方式进行浅拷贝: 使用copy模块的copy方法...可变类型切片 l1 = [1, 2, 3] l2 = l1[:] print(l1 is l2) # False 可变类型的copy方法 [].copy() {}.copy

76610

python可变对象和不可变对象的解释

数据类型分为可变、不可变可变对象表示可以原处修改该数据对象,不可变对象表示必须创建新对象来保存修改后的数据。...在基础数据类型中: 数值、字符串、元组、frozenset是不可变对象 列表、set、dict是可变对象 对于可变对象,比如有一个列表L,查看它的id以及第一个元素的id。...这是因为这个元素是字符串,而字符串是不可变对象。 不可变对象意味着,不能在原始内存地址块中修改数据,必须新创建一个地址块来保存修改后的数据对象。正如上面修改字符串"a"为"aa"的结果。...假如列表L中的第一个元素仍然是一个嵌套在L中的列表,因为列表是可变对象,现在修改L的第一个元素,这第一个元素的地址不会改变。...虽然可变对象可以原处修改数据,不会创建新对象,但并不意味着操作可变对象总是不会创建新对象,这取决于对可变对象做什么操作,比如分片操作一定会创建新对象。

1.2K20

Python面试】 说说Python可变与不可变数据类型?

废话不多说,开始今天的题目: 问:说说Python可变与不可变数据类型的区别? 答:Python中看可变与不可变数据类型,主要是看变量所指向的内存地址处的值是否会改变 。...Python 的六种标准数据类型:数字、字符串、列表、元组、字典、集合。 不可变数据(3个):Number(数字)、String(字符串)、Tuple(元组)。...可变数据(3个):List(列表)、Dictionary(字典)、Set(集合)。 ? 下面分别来说说这两者的具体区别: 1、可变数据类型 可变数据类型:变量所指向的内存地址处的值是可以被改变的 。...图1 python可变数据类型分析 2、不可变数据类型 不可变数据类型:变量所指向的内存地址处的值是不可以被改变。...图2 python可变数据类型分析 如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1.1K30

Python面试】 说说Python可变与不可变数据类型?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!...废话不多说,开始今天的题目: 问:说说Python可变与不可变数据类型的区别? 答:Python中看可变与不可变数据类型,主要是看变量所指向的内存地址处的值是否会改变 。...Python 的六种标准数据类型:数字、字符串、列表、元组、字典、集合。 不可变数据(3个):Number(数字)、String(字符串)、Tuple(元组)。...图1 python可变数据类型分析 2、不可变数据类型 不可变数据类型:变量所指向的内存地址处的值是不可以被改变。...图2 python可变数据类型分析 如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

38730

Python可变对象与不可变对象原理解析

一、原理 可变对象:list dict set 不可变对象:tuple string int float bool 1. python不允许程序员选择采用传值还是传引用。...Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。...如果函数收到的是一个不可变对象的引用,就不能直接修改原始对象——相当于通过“传值’来传递对象。 2. 当人们复制可变对象时,就复制了可变对象的引用,如果改变引用的值,则修改了原始的参数。 3....为了简化内存管理,Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。...每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。

1.2K20

Python 基础系列--可变可变的数据类型

Python 6个标准数据类型.png 这里就有必要了解下什么是可变数据类型,什么是不可变数据类型,这对理解使用函数是否会改变传入的参数的值非常重要,也可避免因数据类型导致的程序 bug。...不可变数据类型 不可变数据类型是:变量所向的内存地址处的值是不可以被改变的。你可能不太理解上面这句话,那么接着往下看。 python 世界里,一切皆为对象(object),任何变量都是对象的引用。...以不可变数据类型中的整数(int)为例: 随便选取一个整数,例如 18 ,在 python 中 id(18) 来获得 18 在内存中的地址。...可变数据类型 可变数据类型是:变量所向的内存地址处的值是可以被改变的。 以可变数据类型中的列表 list 为例,如果不知道 python 的列表也没关系,本文后面会介绍。...但由于集合记录元素位置,因此集合不支持获取元素位置和切片等操作。

1.3K20

Python的基本类型介绍和可变可变

Python的基本类型介绍 前言   做python有一段时间了,从工作开始就在不断地学习和积累。但是有时候用到一些技术点,甚至是基础知识的时候,总是会遗忘。...python的基本数据类型:   Number(数字)、String(字符串)、Tuple(元组)、List(列表)、Dictionary(字典)、Set(集合) 不可变类型:   Number(数字)...、String(字符串)、Tuple(元组) 可变类型:   List(列表)、Dictionary(字典)、Set(集合) 1....3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。 4、Python中的字符串不能改变。 3. Tuple(元组) 1、与字符串一样,元组的元素不能修改。...2、字典的关键字必须为不可变类型,且不能重复。 3、创建空字典使用{ }。 6. Set(集合) 1、集合(set)是一个无序不重复元素的集。 2、基本功能是进行成员关系测试和消除重复元素。

90440

Python--基本数据类型(可变可变类型)

dict 6、布尔型 boll 7、元组 tuple 8 、集合 set python中不可变数据类型和可变数据类型 如何区分可变与不可变 用一张表来说明: 实例如下: Python--基本数据类型...图示如下: 这样python解释器会认为字符串只有’老师说‘和后面的空字符串’ ‘。 #正确示范,引号嵌套 word = '老师说:"学会python就能拿高薪。"'...', ['java', 'php', 'c++']] print(lst3[4][0]) print(lst3[-1][0]) 切片取值的原理是左闭右开,包含最后一位,切片取值实例如下:...#取出数字类型的元素,123,456,789 lst4 = [123,456,789,'name','age','hobby'] print(lst4[0:3]) #包含第四个元素,所以取到第三个789...#实例如下 #空集合 s = set() print(type(s)) # 非空集合 s1 = {1, 2, 3, 4, 5, 6, 7} print(s1,type(s1)) python中不可变数据类型和可变数据类型

88120

图解python可变对象(mutable)

☞机器学习、深度学习、python全栈开发干货 作者:zhengguo 来源:python与算法社区 可变与不可变 列表(list)是一个可变容器,可变与不可变是一对很微妙的概念,因为网上经常出现,所以再重点总结下...因此,对列表而言,它能增加或删除元素,所以它是可变的。 但是,如果仅仅在列表a中做这一步操作: a[2].insert(1,6) #在`a[2]`(也是一个列表)中插入元素6 插入后可视化图: ?...对于“可变”这个概念而言,这就不是真正让a可变的操作。 tuple就是一个典型的不可变容器对象,对它而言,同样也可以修改嵌套对象的取值,但这并没有真正改变tuple内的元素。...不可变容器对象的本质:一旦创建后,长度就被唯一确定。但是,对于list而言,长度会有增有减,所以它是可变的。

94010

python数据类型可变可变知识点总结

python的数据类型可变可变 1、什么是可变可变 首先说一下什么是Python数据的可变可变。...2、不可变类型 数据类型中,有哪些是不可变类型呢? 在Python设计中,整数、浮点型、字符串、元祖都是不可变类型,这点可以通过id()的方法进行验证。其中涉及到一些底层操作,我也不懂。 整数。...字符串 浮点型 元祖 布尔类型 3、可变类型 再python的所有数据类型中,字典、列表、可变集合都是可变类型,在改变元素的值得时候,改变的是该数据类型所在内存空间中对应的内存地址。...总结:不可变数据类型更改后地址发生改变,可变数据类型更改地址不发生改变 2.数据类型分类 在python中数据类型有:整型,字符串,元组,集合,列表,字典。...到此这篇关于python数据类型可变可变知识点总结的文章就介绍到这了,更多相关python的数据类型可变可变内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn

37120
领券