码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习之路16——元组

时间:2015-04-06 08:57:29      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:python   编程   语言   

元组

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

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]
>>> 




Python学习之路16——元组

标签:python   编程   语言   

原文地址:http://blog.csdn.net/u012088213/article/details/44891201

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!