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

Python可变对象和不可变对象

Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置。根据对象的值是否可修改分为可变对象和不可变对象。...其中, 不可对象包括:数字,字符串,tuple 可变对象包括:list,dict,set Python中的变量可以指向任意对象,可以将变量都看成是指针,保存了所指向对象的内存地址(对象的引用)。...不可变对象 对于不可变对象,如果要更新变量引用的不可变对象的值,会创建新的对象,改变对象的引用,举个例子: In [41]: x = 1 In [42]: y = x In [43]: print(...In [96]: a = [1, 2, 3] In [97]: b = a In [98]: a = [1] In [99]: b Out[99]: [1, 2, 3] 参数传递问题 因为可变对象和不可变对象的特性...深拷贝(deep copy):复制了对象的和引用,深拷贝得到的对象和原对象是相互独立的。实现方式:copy模块的deepcopy方法。

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

    Python - 可变和不可变对象

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

    1.8K40

    【Python 第75课】可迭代对象和迭代器

    之所以可以这样,是因为 Python 中的迭代器(Iterator)以及可迭代对象(Iterable)。 如果一个对象定义了 __iter__ 和 __next__ 两个方法,它就是一个迭代器。...有了迭代器的概念之后,如果一个对象定义了 __iter__ 和方法,返回一个迭代器对象,那么它就是一个可迭代的对象。 从表现上来说,一个对象可迭代,那么它就可以被 for 循环使用。...有一点绕,我们再来理一理迭代器(Iterator)和可迭代(Iterable)这两个的差别: 一个迭代器一定是可迭代对象,因为它一定有 __iter__ 方法。反过来则不成立。...__iter__、__next__ 分别对应于 Python 的内置函数 iter() 和 next():比如 iter(aList) 就相当于 aList.__iter__()。...迭代器和可迭代之间的继承关系。 ? __iter__ 方法返回值的区别。id 相同代表是同一个实例。

    94320

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

    什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变。...Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型。 还是看代码比较直观。...先看不可变对象 不可变对象的例子 先说明一点is 就是判断两个对象的id是否相同, 而 == 判断的则是内容是否相同。...如果是下面这种情况,变量修改后不在是good astr = 'good' print(id(astr)) astr += 'aa' print(id(astr)) # id和上面的不一样 由于是不可变对象...当然不可变对象就不是这样了, 可以和这个对比一下 abc = 3 dd = abc dd = 43 print(abc) # 3,并不随dd的改变而改变 但是如果是拷贝,就仅仅是将内容拷贝过去,传递的并是不引用

    2.1K51

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

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

    1.8K20

    【python】可迭代对象与迭代器

    前言 无论你是刚入门python的新兵,还是久经沙场的python老兵。相信在看完这篇本人呕心沥血完成的博客(误人子弟),大家会有新的认识和发现。...__iter__方法,那这个对象就是可迭代对象 只要对象定义了__iter__与__next__方法,那这个对象就是迭代器 可迭代对象:__iter__ 迭代器:__iter__与__next__ 所以有...:迭代器一定是可迭代对象,可迭代对象不一定是迭代器 三、鸭子类型(ducking typing) 看完上面肯定会有大大的疑惑,为什么自定义__iter__方法就是可迭代对象,类A与类B又没有继承,且方法...在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。 使用鸭子测试来评估对象是否可以被解析为特定的类型。...__iter__对应的iter() __next__对应next() python中魔法方法都会对应一个内置函数或者运算符 可迭代对象不一定都可以for循环。

    68310

    python迭代、可迭代对象、迭代器及生

    python中,也使用了 for 关键字来实现类似过程,具体形式为 for ... in ... ,当然迭代过程也可以通过while循环语句等来实现,但不在本文讨论范畴,这里不做说明。...在python中通常使用 for ... in ... 的形式来遍历一个list或tuple等对象,这种遍历过程,通常称为迭代(Iteration)。例如: ?...至于为什么是这样,可以查阅python语法中for语句的执行原理,这里不再详述。 可迭代对象与迭代器 可迭代对象:使用内置iter函数可以获取迭代器的对象,称为可迭代对象。...区别与联系:迭代器可以迭代,但可迭代对象不是迭代器。...可迭代对象一定不能是自身的迭代器,即可迭代对象一定不能实现__next__方法;迭代器应该一直可以迭代,其__iter__方法应该返回自身;可迭代对象可以重复使用(可以不断生成新的迭代器),但迭代器只能用一次

    1.9K21

    迭代和对象的可迭代性

    可迭代与迭代器的区别 2. 应用 2.1. 字典dict的迭代 2.2. 字符串str的迭代 3. 判断对象的可迭代性和获得获取迭代索引 3.1. 判断对象的可迭代性 3.2....参考文献 Python迭代和对象的可迭代性 Python文档整理目录: https://blog.csdn.net/humanking7/article/details/80757533 0....迭代器: 在Python中如果一个对象有__iter__( )方法和__next__( )方法,则称这个对象是迭代器(Iterator);其中__iter__( )方法是让对象可以用for ... in...判断对象的可迭代性和获得获取迭代索引 3.1....迭代的同时获得迭代索引(下标) Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身: eg.1. # d = {'a': 1, '

    1.7K20

    探索Python中的迭代器(Iterator)和可迭代对象(Iterable)

    在Python编程中,迭代器(Iterator)和可迭代对象(Iterable)是两个重要的概念。它们为我们提供了一种简洁而有效的方式来处理数据集合,同时也是深入理解Python语言内部机制的关键。...Python提供了一种简洁的方式来处理这种需求,那就是使用迭代器和可迭代对象。...迭代器和可迭代对象是Python语言内置的机制,它们基于迭代协议(Iteration Protocol)提供了一种统一的方式来遍历数据集合。...在Python中,我们可以使用for循环来遍历可迭代对象。...通过理解迭代器和可迭代对象的原理和用法,我们可以更加灵活地处理数据集合,并编写出更加高效和可维护的Python我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

    1.1K30

    Python进阶——迭代器和可迭代对象有什么区别?

    在 Python 开发中,我们经常听到有关「容器」、「迭代器」、「可迭代对象」、「生成器」的概念。 我们经常把这些概念搞混淆,它们之间有哪些联系和区别呢? 这篇文章,我们就来看一下它们之间的关系。...很简单,在 Python 中,我们通常使用 in 或 not in 来判断一个元素存在/不存在于一个容器内。...在 Python 中,实现迭代器协议就是实现以下 2 个方法: __iter__:这个方法返回对象本身,即 self __next__:这个方法每次返回迭代的值,在没有可迭代元素时,抛出 StopIteration...总结 总结一下,这篇文章我们主要分析了 Python 中「容器」、「迭代器」、「可迭代对象」、「生成器」的联系和区别,用一张图表示它们的关系: ?...如果一个类实现了 __iter__ 和 __next__ 方法,那么它就是一个迭代器。

    2.8K62

    可迭代对象 python_列表是可迭代对象吗

    引出问题: ​如下面所示,存在一个类,并且产生了一个对象,现在想用for循环实现对象的迭代,结果报错了 # -*- coding: utf-8 -*- """ 演示一个类是不可以迭代的 结果存在报错信息...说明 A对象不是一个可以迭代的对象 for i in A: TypeError: 'Students' object is not iterable """ class Students():...for i in A: TypeError: 'Students' object is not iterable Process finished with exit code 1 里插入代码片 ​说明对象是不可以进行迭代的...,没有把每一个步骤都进行截图和代码分享,望谅解 (1)一个类中加入__iter__f (self) 方法后变成可迭代的 并返回如下的错误,说明是类型不正确,但是已经能够发生迭代了 for i in A:..., 算是本篇文章的核心点吧,现在已经完成了一个对象的可迭代 ​结果和之前的一样,功能实现,帮助自己对迭代器的理解 ​ 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

    1.7K50

    python - 可迭代迭代器对象、for循环原理

    目录 可迭代对象与迭代器对象 for循环本质 可迭代对象与迭代器对象 迭代:迭代的意思就是更新换代,每次的更新都必须依赖上一次的结果 迭代其实给我们提供了一种不依赖索引取值的方式 可迭代对象...: 内置有 _ _ iter _ _方法的都称为可迭代对象 有字符串、列表、元组、字典、集合、文件对象 迭代器对象: 内置有 _ _iter _ _ 方法,又含有 _ _next _..._方法称为迭代器对象 文件本身即是可迭代对象,也是迭代器对象 可迭代对象调用_ _iter _ _方法就会变成迭代器对象 迭代器对象在执行_ _next _ _方法就相当于遍历了一次对象...,遍历完再执行会出错 实例如下: # 列表举例 l = [1,2,3,4] # 转换成迭代器对象 res = l....) 优点:可以重复取值 for循环本质 相当于迭代器执行了若干次双下next方法,但是有退出,不会报错 for循环结束python解释器会自动捕获错误,并退出 # 演示for循环的底层原理 '''从可以遍历

    1.4K10

    Python|认识可迭代对象与迭代器

    问题描述 可迭代对象指的是定义了_ _ iter _ _ 方法的对象,调用该方法会返回一个迭代器对象。可迭代对象,例如:list列表、tuple元组、带有上述iter方法的对象等等。...在Python中,迭代是用for…in来完成的,而很多语言比如C语言,迭代list是通过下标完成的 一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带...这些可以直接作用于for循环的对象统称为可迭代对象:Iterable 创建方法 1 可迭代对象 Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple...默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k,v in d.items()。...iter()函数实现,该函数会接受一个可迭代对象,返回一个迭代器对象。

    1.1K30

    Python 迭代器 - Iterable对象

    可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据....实际上,在使用next()函数的时候,调用的就是迭代器对象的__next__方法(Python3中是对象的__next__方法,Python2中是对象的next()方法)。...但这还不够,python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现__iter__方法,而__iter__方法要返回一个迭代器,迭代器自身正是一个迭代器,所以迭代器的__iter__方法返回自身即可...一个实现了__iter__方法和next()方法的对象,就是迭代器。....: 1 2 3 In [36]: 从上面的代码可以看出,在python2使用了next方法之后,就可以正常迭代调用next以及使用for循环进行打印。

    2.3K30

    Java 可变对象和不可变对象

    Java 可变对象和不可变对象 作者:幽鸿   Mar 14, 2016 10:21:27 PM 一、简单定义            不可变对象(Immutable Objects)即对象一旦被创建它的状态...不可变对象的类即为不可变类(Immutable Class)。Java平台类库中包含许多不可变类,如String、基本类型的包装类、BigInteger和BigDecimal等。...二、优缺点      不可变对象有很多优点:    (1)构造、测试和使用都很简单    (2)线程安全且没有同步问题,不需要担心数据会被其它线程修改    (3)当用作类的属性时不需要保护性拷贝    ...(4)可以很好的用作Map键值和Set元素     不可变对象最大的缺点就是创建对象的开销,因为每一步操作都会产生一个新的对象。...Java 类库中的基本数据类型的包装类(如Integer 、 Long 和 Float )都是不可变的,其它数字类型(如 BigInteger 和 BigDecimal )也是不可变的。

    2.3K20

    Python迭代对象、迭代器与生成器

    Python迭代对象、迭代器与生成器 #关系图# #1.可迭代对象(iterable)# 一个具备__iter__()方法的对象,就是一个可迭代对象,但是要成为一个正常的可迭代对象那么就需要遵循协议。...但这个不是一个真正的迭代对象,因为没有返回一个迭代器,也就是没有遵循协议。 #2.迭代器(iterator)# 迭代是Python最强大的功能之一,是访问集合元素的一种方式。...迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next()。 5....字符串,列表或元组对象都可用于创建迭代器: 6. 查看迭代器源码类,可以看到整个类实现了__iter__和__next__两个魔法方法。...#3.生成器(generator)# 生成器是一种特殊的迭代器,不需要手动的编写__iter()__和__next()__方法,因为yeild关键字已经包含了这两种方法。

    76820
    领券