標籤: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——元組