變數的型別
可變 于 不可變型別
這里的可變于不可變 針對的是變數的id 和value值 id不變的情況下,在原來id基礎上(記憶體地址)的值是不是可以改 可以改的是可變型別 不可以改的是不可變型別
可變型別:舊瓶裝新酒 值改變,id不變,證明改的是原值,證明原值是可以被改變的,
不可變型別:新瓶裝新酒,無法用舊瓶裝新酒 值改變,id也變了,證明是產生新的值,壓根沒有改變原值,證明原值是不可以被修改的
不可變型別
int型別 folat型別 str型別 bool 布爾型別 是不可變型別 id于value 是一個整體 無法分開
a = 10
print(id(a))
a = 1000
print(id(a))
140703328683968
2810231683568
a = 134.5
print(id(a))
a = 1314.97
print(id(a))
1888924248944
1888922137744
a = "阿里巴巴是個快樂的青年"
print(id(a))
a = "阿里巴巴不快樂拉"
print(id(a))
2032669169104
2032669237968
a=(10>9)
print(id(a))
140703328405328
a=(10<9)
print(id(a))
140703328405360
可變型別
list dic 可變型別
list_t = [1, 2, 3, 4, 5]
print(id(list_t))
list_t[0] = 75589
print(list_t, id(list_t))
1262084012544
[75589, 2, 3, 4, 5] 1262084012544
也就是list_t中的值可以改 list_t的id不變
list_t = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}
print(id(list_t))
list_t['a'] = 75589
print(list_t, id(list_t))
2702791492992
{'a': 75589, 'b': 2, 'c': 3, 'd': 4, 'e': 5} 2702791492992
在字典中 字典的key 也就是上面的a b c d e 必須是不可變型別
回圈判斷前置內容 條件
什么內容可以作為判斷的條件那
條件可以分為兩種 一種是顯示條件 一種是隱士條件
顯示條件
if 10 > 6 and 10 > 7:# 這種判斷條件 數字判斷 邏輯判斷都可以作為判斷條件 最終得出的是True 或這false
print("你個傻子")
if True: # 也可以直接用Ture false作為判斷條件
print("你個大傻子")
你個傻子
你個大傻子
隱式布林值是
int數字型別 float 浮點型 str 字串型別 llist串列 dic字典都是True
if 10:
print("你個傻子")
if "a":
print("你個大傻子")
if 3.14:
print("你個大傻子")
if [2, 3, 4]:
print("你個大傻子")
if {"阿里": '23'}:
print("你個大傻子")
上面這些值都為True 都會執行 你個大傻子
0 空值 None 三種為隱式的false型別
if 0:
print("你個傻子")
else:
print("你不是個傻子")
if []:
print("你個傻子")
else:
print("你不是個傻子")
if {}:
print("你個傻子")
else:
print("你不是個傻子")
if None:
print("你個傻子")
else:
print("你不是個傻子")
以上這些都會判斷為false 執行 你不是個傻子 這句話,
深淺copy
淺層copy 對于淺層的copy 在可變資料型別上, 兩個資料之間是有關聯的 無法完全分開
list1 = [12, 34, ['alin']]
list2 = list1.copy()
print(id(list1[0]), id(list1[1]), id(list1[2])) #copy的兩個變數資料的記憶體地址一樣
print(id(list2[0]), id(list2[1]), id(list2[2]))
list1[0] = 567
print(list1[0], id(list1[0]), list2[0], id(list2[0])) #對于不可變型別,會生成新的記憶體地址和值 copy的list2不受影響
list1[2][0] = 'alix'
print(list1[2], id(list1[2]), list2[2], id(list2[2])) #對于可變型別, list1與list2是相互影響的,修改了list1 list2中的值也跟著變化,同時是在原有的記憶體空間修改的
140737487882240 140737487882944 1883384888064
140737487882240 140737487882944 1883384888064
567 1883382446576 12 140737487882240
['alix'] 2372841945600 ['alix'] 2372841945600
深層copy
import copy #引入包
list1 = [12, 34, ['alin']]
list2 = copy.deepcopy(list1) # 深層copy
print(id(list1[0]), id(list1[1]), id(list1[2]))
print(id(list2[0]), id(list2[1]), id(list2[2])) #copy后 可變與不可變型別的開始不同了,可變資料型別有了新的記憶體地址
list1[0] = 567
print(list1[0], id(list1[0]), list2[0], id(list2[0]))
list1[2][0] = 'alix'
print(list1[2], id(list1[2]), list2[2], id(list2[2])) #可變與不可變型別 兩個變數都是完獨立開的 不受影響,
140737487882240 140737487882944 2121942939712
140737487882240 140737487882944 2121942907328
567 2121940498928 12 140737487882240
['alix'] 2121942939712 ['alin'] 2121942907328
總結:
淺copy 與深copy不同
淺copy沒有把可變型別與不可變型別區分開,當可變型別發生變化的時候,copy的兩個變數都會發生變化 ,沒有完全區分開兩個變數,深層copy通過import copy 當copy的時候 可變型別與不可變型別的操作是不同的,不可變型別用的是原來的記憶體地址 可變型別會新開辟記憶體地址,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/142969.html
標籤:其他
下一篇:6-python 流程控制
