Python学习之路16——元组

元组

元组和列表非常相似。元组与列表不同是的元组用的是圆括号而列表用的是方括号。而且元组是不可变类型。

1创建元组并赋值
>>> aTuple = (123, 'string', 333.0, [1,2,3])
>>> aTuple
(123, 'string', 333.0, [1, 2, 3])
>>> t = tuple('test')
>>> t
('t', 'e', 's', 't')
>>> 

2访问元组的值
访问元组的元素需要元组的切片操作,元组的切片操作和列表一样。
>>> aTupe
(1, 'two', ['lucky', 'happy'], 3.3)
>>> aTupe[1:3]
('two', ['lucky', 'happy'])
>>> aTupe[1:]
('two', ['lucky', 'happy'], 3.3)
>>> aTupe[2][1]
'happy'
>>> 

3更新元组
由于元组是不可变类型,所以程序员不能更新元组的元素。要更新元组,就必须利用旧元组片段再构造一个新元组。
>>> aTupe = aTupe[0], aTupe[1]
>>> aTupe
(1, 'two')

4删除元组
del aTuple

元组的操作

元组和列表一样,拥有重复*, 连接+, 成员关系in, 切片的操作。
同样的拥有str,max,min,cmp等内建函数
但元组没有列表的排序,添加,替换等操作,因为元组的不可变。

拷贝Python对象、浅拷贝和深拷贝

对象赋值实际是简单的对象引用。也就是说,当你创建一个对象,然后把这个对象赋给另一个对象的时候,Python并没有拷贝这个对象,而是拷贝了这个对象的引用。
让我们来看一个浅拷贝
>>> hubby = person[:]
>>> wifey = list(person)
>>> [id(x) for x in person, hubby, wifey]
[140032524226712, 140032524226784, 140032524227144]
>>> hubby[0] = 'joe'
>>> wifey[0] = 'jane'
>>> hubby, wifey
(['joe', ['saving', 100.0]], ['jane', ['saving', 100.0]])
>>> hubby[1][1] = 50.00
>>> hubby, wifey
(['joe', ['saving', 50.0]], ['jane', ['saving', 50.0]])
>>> [id(x) for x in hubby]
[140032524156760, 140032524144512]
>>> [id(x) for x in wifey]
[140032524223856, 140032524144512]
>>> 
当hubby的账号余额变成50,wifey的账号余额也变成50了。但为什么两个账户的名字又不相同呢?
字符串是不可变类型,当账户的名字重新赋值,这两个账户引用的是两个不同的字符串对象。但列表是可变类型,两个账户引用的是同一个列表对象。我们可以通过观察他们的id值来判断。从上面的结果可以看出,两个账户引用的事不同的对象,但两个账户里面的小列表是引用的相同的列表对象。这就解释了我们的疑惑。

让我们来看深拷贝
深拷贝需要利用这个函数--copy.deepcopy()
>>> person = ['name', ['saving', 100.00]]
>>> hubby = person
>>> import copy
>>> wifey = copy.deepcopy(person)
>>> [id(x) for x in person, hubby, wifey]
[140032524227072, 140032524227072, 140032524227216]
>>> hubby[0] = 'joe'
>>> wifey[0] = 'jane'
>>> hubby, wifey
(['joe', ['saving', 100.0]], ['jane', ['saving', 100.0]])
>>> hubby[1][1] = 50.00
>>> hubby, wifey
(['joe', ['saving', 50.0]], ['jane', ['saving', 100.0]])
>>> [id(x) for x in hubby]
[140032524231544, 140032524226856]
>>> [id(x) for x in wifey]
[140032524224096, 140032524227360]
>>> 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值