1. 程式人生 > >【Python】元祖不是完全不可變

【Python】元祖不是完全不可變

元組

學習Python基礎的時候,就知道元祖有序,不可變.,後來因為需要修改元祖中的引數,才知道其實元祖也可以發生變化
元組不可變,如果元組裡面有列表或者變數的時候,那麼元祖就可以發生變化.

元祖裡包含列表的時候:

a_list=[1,2]
a_tuple = (('a',1
),('b',2),a_list) print(a_list) print(a_tuple)

輸出結果:

[1, 2]
(('a', 1), ('b', 2), [1, 2])

稍微改改:

def change_tuple(x,y):
    if x>y:
        a_list=[1,2]
    else:
        a_list=[1,3]
    a_tuple = (('a',1),('b',2),a_list)
    print(a_list)
    print(a_tuple)

change_tuple(1,2)
change_tuple(2
,1)

輸出結果:

[1, 3]
(('a', 1), ('b', 2), [1, 3])
[1, 2]
(('a', 1), ('b', 2), [1, 2])

當a_list改變的時候,a_tuple是可以發生改變的

但其實元組還是沒變,因為元組指向的是列表,始終沒變
裡面有變數,也是這樣,指向的是變數.但是已經滿足我的需求,讓元祖在不同情況下,輸出不同的結果.

(1,)這樣形式的元祖

a=(1)
print(type(a))
b=(1,)
print(type(b))

輸出結果:

<class 'int'>
<class 'tuple'>

以前其實看到(a,)這樣的時候,是有點詫異的,但是,省略會報錯,試了試,原來是這樣.型別都不同.
網上說的是:因為這個()和小括號一樣,預設以小括號處理了
如果想當做元組()使用.可以(1,)

當元組裡的變數變化的時候,也是可以發生變化

處理和上面的元祖裡面有列表類似..

測試環境:Python3.6+Pycharm