Python学习笔记之tuple

一、tuple的基础概念---被限制的列表

        另一组有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。我们创建一个如下的元组。

        

      现在元组已经创建成功,初始化完成,他的值不能再被做任何修改,它也没有append(),insert()这些方法,但是他获取元素和列表一样的方法一样,还是使用索引,例如tuple1[1]

        

       在上一节我们说过列表,列表可以存放任何数据类型,也可以随时对元素做出修改,但是这样的话列表的“权利”过于大了,是的我们的数据安全的得不到保证,但是tuple就不一样他和列表一样,他也可以存放任何数据类型的元素,也可以使用索引,切片,就是不能能更改元组中的任何数据,我们的元组在定义的时候,元组的数据就已经被确定下来。因此我们也可以认为元组就是一种被限制的列表

       

二、tuple的定义
    (1)定义一个普通的元组

            就如同刚开始时我们的例子那样,定义一个带有多个数据的元组,我们需要注意的时 元组使用的是 ‘()’,而不是

  ‘[ ]'  其中每个元素使用逗号隔开。但是我们也可以不使用()如下:

            

    (2)定义一个空元祖
            上一节,定义一个空列表我们使用的方法是 list1= [ ] ,同样定义一个空的元组 我们使用的是 tuple1 = ( )。
            

   (3)定义一个只有一个元素的元组
         我们在定义只有一个元素的元组时如果下面这样是错误的

        

        我们在这里定义的实际上不是一个元组,而是一个存放数值为1的整形变量,因为python解释器并不能分辨此时的()是属于数学中的计算符号,还是元组中的()。解释器有规定此时这种情况(1) 将其当做小括号计算,因此tuple3是一个整型变量。

       我们在定义时使用 ,作为一个“占位符”这样就可以被识别了

        

三、“可变元组”

           我们在上面说过元组是在定义之后其元素将不可被更改,但是为什么又有可变元组呢?其实在这里元组还

    是不可变的。这就要说到我们的内存模型了。

            首先我们来看一个“可变的元组”。

            

        如上,我们的元组中存在了一个名为other的列表(元组可以存放任何数据类型),我们的元组不可变,但是我们的列表是可变的。

           

        

        我们表面上看元组的数据改变了,但是实际上改变的是list1,元组中的每一个元素都指向一个内存块,而我们的list1 指向的依旧是原来的那个内存块。因此我们要正确理解元组是不可变的:元组的不可变是指元组中的变量所指向的内存不改变。(可以使用id()函数来观察元组甚至是元组的每个元素的指向地址)

        我们如果需要创建一个完全不可变的元组,那我们就需要保证元组的每一个元素本身也不可变。

四、元组的复制

         在列表的拷贝时我们使用了切片进行列表的深拷贝,避免了拷贝后的变量和被拷贝的变量同时指向同一个内存块。

        同样我们在元祖中如果仅仅只是使用 = 进行拷贝也会出现下面情况

        

        那么如果我们使用了切片进行拷贝会不会还是这种情况呢,我们试一试。

        

        如上所示我们使用切变也是不可以的,因此Python解释器的实现导致的,由于tuple是immutable的,所以说没有必要在内存里多维护一个字面意义一样的tuple(元组不可变),因此Python对于tuple的拷贝仅仅只是增加的一个指向而已,并没有做到真正的拷贝。

        如果们真的需要进行元组的深拷贝,那么我们需要使用下面方法

        

        我们可以记住元组使用想要深拷贝需要使用copy文件(import)和深拷贝函数( copy.deepcopy() )。  

五、元组操作符

        和序列一样我们的元组也有许多可以用的操作符,比如关系运算符(大于、等于、小于)、"*" 、"+" 、in 、not in 等等。其规则使用方式和列表一样

        

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值