python3中有六个标准的数据类型:number(数字型)、string(字符串型)、list(列表)、type(元祖)、dictionary(字典)、set(集合),其中不可变类型三个:number、type、stri;剩下的三个是可变数据类型。

0x01:不可变数据类型

对于判断是否为可变数据类型,我们可以用id函数,它的作用是获取对象的内存地址。假如我们写了下面两行代码:

>>> a=5 
>>> id(5)
1351465552

第一行声明了一个number类型的变量,并给他赋值为5,第二行获取到了a这个对象的内存地址。

下面我们改变一下a的值,在id一下试试:

>>> a=5
>>> id(5)
1351465552
>>> a=6
>>> id(a)
1351465584

可以看到当a的值被改变时,a这个number类对象的内存地址也发生了变化。也就是说,一个内存地址只能对应一个值,内存地址与值的对应关系是不能变的,这种叫不可变数据类型。同样,字符串也是。

>>> s='qwer'
>>> id(s)
2374200496792
>>> s='qwr'
>>> id(s)
2374200498976

元祖里面的值不能被修改,所以也为不可变数据类型,但如果元祖里含有列表的话,列表里面的值可以被修改:

>>> t=(1,2,3,[4,5,6])
>>> t[3]
[4, 5, 6]
>>> t[3][1]
5
>>> t[3][1]=6
>>> t[3]
[4, 6, 6]

 0x02:可变数据类型

可变数据类型就是当对象的值改变是,对象的内存地址不会改变。用list试一下

>>> a=[4,5,6]
>>> id(a)
2374200503880
>>> a[1]
5
>>> a[1]=6
>>> a[1]
6
>>> id(a)
2374200503880

但是你如果像下面这样写的话,那地址就会改变了。

>>> a=[1,2,3]
>>> id(a)
2374200502984
>>> a=[4,5,6]
>>> id(a)
2374200503880

因为这样写的话,就不是改变a的值了,此时的a已经不再是上面哪一个了,它是一个新的list对象

(ps:本人太菜,若有错误的地方欢迎大佬随时责骂。。。。xixixii)

python面试题(-)可变数据类型与不可变数据类型的更多相关文章

  1. python基础之可变数据类型与不可变数据类型

    一.什么可变数据类型和不可变数据类型 可变数据类型:value值改变,id值不变:不可变数据类型:value值改变,id值也随之改变. 二.如何确定一种数据类型是可变的还是不可变的 根据可变数据类型与 ...

  2. python的可变数据类型和不可变类型

    python里面一切皆对象 ython的每个对象都分为可变类型和不可变类型 整形,浮点型,字符串,元组属于不可变类型,列表,字典是可变类型 不可变数据类型 对不可变类型的变量重新赋值,实际上是重新创建 ...

  3. 一道问题引出的python中可变数据类型与不可变数据类型

    一. 问题的提出 我们先来看两个对比 第一道题,当对象为整数时,最终结果:b = 2, a = 1,b的变化没有引起a的变化 a = 1 b = a b += 1 print(a) print(b) ...

  4. python 可变数据类型和不可变数据类型(7)

    python数据类型分别有整数int / 浮点数float / 布尔值bool / 元组tuple / 列表list / 字典dict,其中数据类型分为两个大类,一种是可变数据类型:一种是不可变数据类 ...

  5. python 可变数据类型 和 不可变数据类型

    在 python 中,类型属于对象,变量是没有类型的: a=[1,2,3] a="Runoob"以上代码中,[1,2,3] 是 List 类型,"Runoob" ...

  6. Python基础(list和tuple)可变集合和‘不可变’集合

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  7. Python基础(3)_可变对象与不可变对象、列表、元祖和字典

    可变对象与不可变对象 实例被创建后,身份和类型是不可变的, 如果值是不可以被修改的,则是不可变对象 如果值是可以被修改的,则是可变对象 #在id不动,type也不动,value被修改了,则称为可变 # ...

  8. python27期day03:字符串详解:整型、可变数据类型和不可变数据类型、进制转换、索引、切片、步长、字符串方法、进制转换、作业题。

    1.%s: a = "我是新力,我喜欢:%s,我钟爱:%s"b = a%("开车","唱跳rap")print(b)2.整型: 整数在Pyt ...

  9. python的可变类型和不可变类型

    Python有六种数据类型:数字类型.字符串类型.列表类型.元组类型.字典类型和集合类型 其中不可变类型包括三种:数字类型.字符串类型和元组类型 剩余三种为可变类型:列表类型.字典类型和集合类型 可变 ...

  10. Python中的不可变对象类型与可变对象类型

    https://blog.csdn.net/answer3lin/article/details/86430074 其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++ ...

随机推荐

  1. JS 实现Map

    function Map() { this.arr = new Array(); var struct = function(key, value) { this.key = key; this.va ...

  2. python 教程 第二十一章、 扩展Python

    第二十一章. 扩展Python /* D:\Python27\Lib\Extest-1.0\Extest2.c */ #include <stdio.h> #include <std ...

  3. 测试WPF绑定bug

    1.低级错误:有没有绑错2.去属性那里打断点,get.set有没有进3.xaml加上twoway,UpdateSourceTrigger=PropertyChanged

  4. C#并口热敏小票打印机打印位图

    原文:C#并口热敏小票打印机打印位图 最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了.   这是DEMO的窗体:   下面是打印所需要调用的代码: class ...

  5. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.

    Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when ...

  6. ubuntu 16.04 安装 openjdk 1.7

    由于编译Android源码需要openjdk1.7.X版本.ubuntu 16.04自带openjdk为1.8.X版本. sudo apt-get install openjdk-7-jre 或者su ...

  7. winform实现DataGridView全选

    之前写过,一时想不起来就在网上找了一些.结果感觉好麻烦.于是就自己打开之前做过的功能.找到源码. private void CheckDatabasexuan() { DataGridViewChec ...

  8. murmurhash2算法 和 DJB Hash算法是目前最流行的hash算法

    murmurhash2算法 和 DJB Hash算法是目前最流行的hash算法 1.DJB HASH算法 1 2 3 4 5 6 7 8 9 10 11 /* the famous DJB Hash ...

  9. 《芒果TV》UWP版利用Windows10通用平台特性,率先支持Xbox One平台

    在Windows开发者中心开放提交Xbox平台应用之后,<芒果TV>UWP版迅速更新v3.1.2版,通过升级兼容目标,利用Windows10通用平台特性,率先覆盖Xbox平台用户. 芒果T ...

  10. ORACLE 11.2.0.4 Single To Single Data Guard 安装 physical standby

    [root@ORACLE ~]# su - oracle [oracle@ORACLE ~]$ sqlplus / as sysdba . 查看主库归档模式: SQL> select log_m ...