首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python可变对象和不可变对象

Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置。根据对象的值是否可修改分为可变对象和不可变对象。...其中, 不可对象包括:数字,字符串,tuple 可变对象包括:list,dict,set Python中的变量可以指向任意对象,可以将变量都看成是指针,保存了所指向对象的内存地址(对象的引用)。...不可变对象 对于不可变对象,如果要更新变量引用的不可变对象的值,会创建新的对象,改变对象的引用,举个例子: In [41]: x = 1 In [42]: y = x In [43]: print(...)) 140719461487648 In [46]: print(id(x)) 140719461487680 In [47]: print(id(2)) 140719461487680 上述是int...所以,不可变对象的优点是对于相同的对象,无论多少个引用,在内存中只占用一个地址,缺点是更新需要创建新的对象,因此效率不高。

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

    Python - 可变和不可变对象

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

    1.3K40

    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...,只是若原对象中存在可变属性/字段,则浅拷贝产生的对象的属性/字段引用原对象的属性/字段,深拷贝产生的对象和原对象则完全独立: l1 = [1, 2, 3] l2 = l1.copy() print(l1...,这里name属性的地址一样 p3.id.name = "p3" print(p1.id.name) # 还是p2 Python中可使用以下几种方式进行浅拷贝: 使用copy模块的copy方法

    79510

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

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

    1.3K20

    TypeError: ‘int‘ object is not callable:整数对象不可调用的完美解决方法 ️

    TypeError: ‘int’ object is not callable:整数对象不可调用的完美解决方法 ️ 大家好,我是默语,擅长全栈开发、运维和人工智能技术。...在今天的技术博客中,我们将深入探讨一个常见的Python错误——TypeError: ‘int’ object is not callable。...摘要 在Python编程中,TypeError: ‘int’ object is not callable错误通常发生在开发者尝试将整数对象作为函数调用时。...以下是一个简单的示例: number = 5 result = number() # 尝试将整数对象作为函数调用 运行上面的代码时,会抛出如下错误: TypeError: 'int' object is...3.2 检查调用方式 在调用函数时,确保你调用的是一个有效的函数,而不是一个整数或其他不可调用的对象。

    42210

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

    编程关键问题 面向对象的语言,普遍存在的一个问题就是对象的可变(mutable),与对象的不可变(immuatable)。...接触过c, c++, c#, java, python, 这些语言除了c不具有强烈的这个(可变与不可变)色彩外,其他语言都存在这个性质。...这个系列是Python与数据分析,所以,今天我们重点拿Python语言来说说这个性质,其他语言类似。...Python中的不可变对象常见的: int float complex bool string tuple range frozenset bytes 可变对象常见的: list dict set bytearray...用户自定义的类(未特别声明为不可变对象) 由此可见,Python中常见的内置不可迭代的对象往往为不可变对象,但是也有例外,如frozenset;而可迭代对象往往是可变对象。

    74520

    详解Python中的可哈希对象与不可哈希对象(二)

    简要的说可哈希的数据类型,即不可变的数据结构(数字类型(int,float,bool)字符串str、元组tuple、自定义类的对象)。 (1)为什么不可变数据类型是可哈希hashable的呢?...前面既然说了整数int是可哈希对象,不放我们看一下它具不具备这几个魔术方法: In [51]: a=100 In [52]: dir(a) Out[52]: [......a=Animal("dog") print(hash(a)) # 返回 1000 现在对于什么是python的可哈希对象和哈希函数如何实现应该有了比较清楚的了解了。...hash 代码根据键和每个进程的种子而变化很大;例如,"Python" 的 hash 值为-539294296,而"python"(一个按位不同的字符串)的 hash 值为 1142331976。...(3)总结: 字典的key一定要是不可变对象,要是能够哈希的对象,即hashable对象,包括: 数字类型(int,float,bool)字符串str、元组tuple、自定义类的对象,这几类,比如下面的字典

    10.4K63

    【已解决】Python错误:TypeError: ‘int‘ object is not callable的解决办法

    前言 上次有粉丝私信问了我一个bug:TypeError: ‘int’ object is not callable如何解决,我们先来看看他的报错代码。...print('the number of custom is '+str(self.custom)) u = User('reborn',18,19) u.custom() 他的报错如下: D:\>python...Traceback (most recent call last): File "test.py", line 11, in u.custom() TypeError: 'int...' object is not callable 其实这个问题,很简单,就是函数名和变量名重复了,当这两个名称重复时,程序会默认调用Int型对象,但Int对象没有什么调用可言,就爆出了这个错误,解决方法也很简单...)() # 尝试调用字符串对象,引发TypeError 二、解决方案 避免覆盖内置函数或已定义函数:不要将变量赋值为一个基本数据类型,覆盖已有的函数名。

    50910

    【python】 深拷贝和浅拷贝:copy模块、可变对象和不可变对象、其他拷贝方式

    Python赋值操作或函数参数传递传递的永远是对象引用(即内存地址),而不是对象内容。在Python中一切皆对象,对象又分为可变(mutable)和不可变(immutable)两种类型。...深拷贝(Deep Copy):递归拷贝顶层对象,以及它内部的子元素对象 ---- 可变对象和不可变对象 对象的类型决定了它装着的数据是允许被修改的变量(可变的mutable)还是不可被修改的常量(不可变的...mutable: 可变对象,如List、Dict immutable: 不可变对象,如Number、String、Tuple、Frozenset 【注释】:Python赋值操作或函数参数传递,传递的永远是对象引用...,没有拷贝子元素对象['hello','world'],即a[2]和b[2]指向同一个列表对象 ---- (3)当顶层对象是immutable不可变对象,同时它的子元素对象也全都是immutable不可变对象...140531581905808),不会影响到b[2][1] ---- (3)当顶层对象是immutable不可变对象,同时它的子元素对象也全都是immutable不可变对象 In [1]: a = (1

    1.2K20

    python type error是什么意思_Python 报错 TypeError:’DoesNotExist’对象不可调用

    导致越来越多的人学 Python,但是新手学 Python 一般会遇到各种各样的问题。...今天,我又在 Stackoverflow 上看到了一个 Python 非常著名的 TypeError 错误问题:DoesNotExist 对象不可调用。今天我们一起来看看这个问题该如何解决!..._meta.object_name) TypeError: ‘DoesNotExist’ object is not callable 错误详情大概如上所示。正常情况下,这段代码是有效的。...但它却总是随机的抛出 DoesNotExist 错误。 在 Stackoverflow 上,有人建议我们将下面的代码进行替换。...备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

    1K20

    【python】不可变对象与可变对象 || 运算符 == 与 is 的区别 || 浅拷贝和深拷贝

    问题一:不可变对象与可变对象 含义: 不可变对象:是指创建后,内容不可修改的对象。我们只能通过重新创建这个对象的方式来实现修改它的内容。 可变对象:是指创建后,内容可修改的对象。...修改内容后,这个对象本身还是之前那个对象。 常见不可变对象:如整数 int,浮点 float,字符串 str,元组 tuple 等。...这里就需要提到python的内存管理机制。...总结: 1:对于不可变对象,如整数、字符串、元组,可能是为了优化性能,python会重复使用已有的对象,即使是两个不同变量,在内容相同的情况下,其实指向的内存地址也是一样的。...3:对于可变对象内部嵌套的不可变对象,比如列表中嵌套的列表的元素为整数时,字典中嵌套的字典的值为字符串时,它们也会重复使用已有对象的内存地址。

    12210

    Python中不可思议的错误,原来是浮点数计算的陷阱。

    图片我们先来看一个不可思议的错误:1.2-1.0=0.19999999999999996图片这是一个常见的错误,你遇到过吗?今天我们就一起来分析一下:原因是什么?如何得到正确的运算?...python中还有哪些意想不到的错误?先说原因如果你对计算机毫无了解,你可以跳过这部分,直接去看下一小节:如何得到正确的运算。这是因为浮点数运算的特殊性决定的,其它编程语言也有这个问题。...float 对象的值是以固定的精度(通常为 53 位)存储的二进制浮点数,由于 Python 使用 C 操作,而后者依赖于处理器中的硬件实现来执行浮点运算。...图片还有哪些常见错误?之前给大家整理过2期:【Python新人】常见报错及解决方案,看完少走3个月的弯路,建议收藏!Python官方整理的27个历史遗留问题。...欢迎大家把你遇到的错误,在评论区和我讨论哟~

    41030

    java静态全局变量和全局变量的区别_java静态全局变量

    : 声明已存在的变量时引发错误。...Java被创建为纯粹的面向对象的编程语言,这就是为什么您创建的所有内容都包装在一个类中的原因。 通过纯粹面向对象,鼓励开发人员将相关的变量和函数保持在一起,从而使程序整体上更有条理。...例如: class GridCoordinate { int x; int y; } 如果不知道这些变量是GridCoordinate类的一部分,则几乎不可能识别它们。...订阅我们的新闻 在收件箱中获取临时教程,指南和作业。从来没有垃圾邮件。随时退订。 订阅电子报 订阅 这是Java试图通过没有全局变量来避免的那种情况。...另一个常见用法是在应用程序中定义一些常量,这些常量具有您经常使用的不可变值。

    4.5K40
    领券