python中数字是否为可变类型

本文以Python3为例,包括六种数据类型:

1、数字(Number):
        int整型
        long长整型
        float浮点数
        complex复数
        布尔值(0和1)
2、字符串(String)
3、列表(List)
4、元组(Tuple)
5、字典(Dictionary)
6、集合(Set)

通过id函数查看变量i的内存地址进行验证(使用hex(id(i)) 可以查看16进制的内存地址)

不可变类型:Number、String、Tuple

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

对于不可变类型int,无论创建多少个不可变类型,只要值相同,都指向同个内存地址。

例如Number:

>>> number1 = 123
>>> id(number1)
8790928028112
>>> number2 = 123
>>> id(number2)
8790928028112
>>> number3 = 321
>>> id(number3)
49143760
>>>

可以看到执行 i += 1 时,内存地址都会变化,因为int 类型是不可变的。

>>> i = 5
>>> id(i)
8791205700368
>>> i += 1
>>> id(i)
8791205700400
>>>
>>> j = i
>>> id(j)
8791205700400
>>> j
6
>>>

可变类型:List、Dictionary、Set

对可变数据类型重新赋值,并没有创建新的对象。

例如List:

>>> list1 = [1,2,3,4,5]
>>> id(list1)
49307976
>>> list2 = [1,2,3,4,5]
>>> id(list2)
49307784
>>> list1.append(123)
>>> list1
[1, 2, 3, 4, 5, 123]
>>> id(list1)
49307976
>>>

如果执行list1=list2,因为list1、list2指向同个内存地址,而list1、list2的类型都是List,可变类型,对list1、list2任意一个List进行修改,都会影响另外一个List的值。

>>> list1
[1, 2, 3, 4, 5, 123]
>>> id(list1)
49307976
>>>
>>> list1 = list2
>>> id(list1)
49307784
>>> id(list2)
49307784
>>> list2
[1, 2, 3, 4, 5]
>>> list2.append(456)
>>> list1
[1, 2, 3, 4, 5, 456]
>>> list2
[1, 2, 3, 4, 5, 456]
>>>

总而言之:

不可变类型是指向值(Value),值不变,则对象不变;值变,则对象变。

可变数据类型是指向名字(Name),名不变,则对象不变;名变,则对象变。

内容扩展:

Python中可变类型和不可变类型的数据?

  1. 可变类型有list,dict.不可变类型有string,number,tuple.
  2. 当进行修改操作时,可变类型传递的是内存中的地址,也就是说,直接修改内存中的值,并没有开辟新的内存。
  3. 不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作。

到此这篇关于python中数字是否为可变类型的文章就介绍到这了,更多相关python中数字是不可变类型吗内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python如何派生内置不可变类型并修改实例化行为

    本文实例为大家分享了python派生内置不可变类型并修改实例化行为的具体代码,供大家参考,具体内容如下 案例: 我们想要自定义新类型的元组,对传入的可迭代对象我们只保留其中的int类型并且值大于0的元素,如下: [1, -2, 'xxx', 7, [1, 'oo'], 9]  >> (1, 7, 9) 如何实现? 1.自定义一个类,继承tuple类 2.重写__new__,类方法,new方法是对参数进行实例操作,在此之间,对实例参数进行预操作,修改实例化行为(new方法先于init方法) 3.

  • Python 可变类型和不可变类型及引用过程解析

    在Python中定义一个数据便在内存中开辟一片空间来存储这个变量的值,这块已经被分配的内存空间便会有一个内存地址.访问这块内存需要用到变量名,变量名实际存储的是变量的地址在内存中的地址,但是使用print()函数得到的确实这块内存中实际的地址.这个就当成规定就好,没必要纠结. 获得变量在内存中的地址,可以使用id()函数. 常规使用 变量之间的赋值其实是把一个变量的内存地址传递给另一个变量,这样两个变量便都指向内存中的同一块空间,因此这两个变量的之是相等的 a = 1 b = a print("

  • python中数字是否为可变类型

    本文以Python3为例,包括六种数据类型: 1.数字(Number):         int整型         long长整型         float浮点数         complex复数         布尔值(0和1) 2.字符串(String) 3.列表(List) 4.元组(Tuple) 5.字典(Dictionary) 6.集合(Set) 通过id函数查看变量i的内存地址进行验证(使用hex(id(i)) 可以查看16进制的内存地址) 不可变类型:Number.Strin

  • 对Python中画图时候的线类型详解

    在Python中用matplotlib画图的时候,为了区分曲线的类型,给曲线上面加一些标识或者颜色.以下是颜色和标识的汇总. 颜色(color 简写为 c): 蓝色: 'b' (blue) 绿色: 'g' (green) 红色: 'r' (red) 蓝绿色(墨绿色): 'c' (cyan) 红紫色(洋红): 'm' (magenta) 黄色: 'y' (yellow) 黑色: 'k' (black) 白色: 'w' (white) 灰度表示: e.g. 0.75 ([0,1]内任意浮点数) RG

  • 如何理解python中数字列表

    数字列表和其他列表类似,但是有一些函数可以使数字列表的操作更高效.我们创建一个包含10个数字的列表,看看能做哪些工作吧. # Print out the first ten numbers. numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for number in numbers: print(number) range() 函数 普通的列表创建方式创建10个数是可以的,但是如果想创建大量的数字,这种方法就不合适了.range() 函数就是帮助我们生成大量数

  • python中数字列表转化为数字字符串的实例代码

    目录 1. python中数字组成的列表转化为字符串或者一串数字 2.python中把数字组成的列表转化为字符串列表 3.Python中把字符组成的列表转化为数字 4.Python中把一串数字字符转化为单个字符列表或者数字列表 5. Python中把字符串列表转化为数字列表 参考文章: 总结 1. python中数字组成的列表转化为字符串或者一串数字 f=[1,2,3,4] num=len(f) m='' #建立空字符串 for i in range(num): x=str(f[i]) m=m+

  • 小议Python中自定义函数的可变参数的使用及注意点

    可变参数 Python的可变参数有两种,一种是列表类型,一种是字典类型.列表类型类似 C 中的可变参数,定义方式为 def test_list_param(*args) : for arg in args : print arg 其中 args 是一个 tuple. 字典类型的可变参数: def test_dict_param(**args) : for k, v in args.iteritems() : print k, v 其中 args 是一个 dictionary 可以分别传递 tup

  • 一篇文章带你了解python中的typing模块和类型注解

    目录 typing模块 Dict List Tuple set/AbstractSet Sequence NoReturn Any TypeVar NewType Callable Union Optional Generator 总结 function annotation 写法: 使用冒号 : 加类型代表参数类型 默认值参数示例:b: int = 2 使用 -> 加类型代表返回值类型 python解释器运行时并不会检查类型,类型不对也不会抛异常,仅仅是注解而已.示例: def plus(a:

  • 详解Python中内置的NotImplemented类型的用法

    它是什么? >>> type(NotImplemented) <type 'NotImplementedType'> NotImplemented 是Python在内置命名空间中的六个常数之一.其他有False.True.None.Ellipsis 和 __debug__.和 Ellipsis很像,NotImplemented 能被重新赋值(覆盖).对它赋值,甚至改变属性名称, 不会产生 SyntaxError.所以它不是一个真正的"真"常数.当然,我们应

  • Python中数字以及算数运算符的相关使用

    Python数字 数字数据类型用于存储数值. 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象. 当你指定一个值时,Number对象就会被创建: var1 = 1 var2 = 10 您也可以使用del语句删除一些对象引用. del语句的语法是: del var1[,var2[,var3[....,varN]]]] 您可以通过使用del语句删除单个或多个对象.例如: del var del var_a, var_b Python支持四种不同的数值类型: int(有符号整型)

  • Python中的函数参数类型检查

    目录 Python函数参数类型检查 下面我们用装饰器来实现 总结 Python函数参数类型检查 有一个很经典的笑话: 三个月之前,只有我和上帝知道这代码是干什么的. 现在,只有上帝知道了. 在Python中,不知道函数参数类型是一个很正常的事情,特别是在一个大项目里. 我见过有些项目里,每一个函数体的前十几行都在检查参数类型,这实在是太麻烦了.而且一旦参数有改动,这部分也需要改动. 下面我们用装饰器来实现 函数参数的强制类型检查. 首先,这个装饰器,要接受类型参数,和指定函数参数的类型参数.也就

随机推荐