1.類型轉換
1.1 int(x):轉化為一個整數,只能轉換由純數字組成的字符串
float->int
浮點型強轉整形會去掉小數點后面的數,只保留整數部分
a = 1.2
print(type(a)) #<class 'float'>
b = int(a)
print(type(b)) #<class 'int'>print(int(1.8)) #1
str->int? ?如果字符串中有數字和正負號(在開頭)以外的字符就會報錯(+/-寫在前面表示正負號,寫在后面是加減號)
a = int('123')
print(a,type(a)) #123 <class 'int'>
從控制臺輸入數字的時候可以使用強制轉換,input輸入時默認輸入的是字符串類型
age = int(input("請輸入年齡"))
if age > 18:print("成年了")
1.2 float(x):轉換為一個小數
整形轉換為浮點型會自動添加一位小數
如果字符串中由正負號,數字和小數點以外的字符,不支持轉換
print(float(11)) #11.0
print(float(-23)) #-23.0
print(float('+2.3456')) #2.345
#print(float(10-)) 報錯
1.3 str(x):將對象轉換為字符串類型,任何類型都可以轉換
浮點型轉換成str會自動去除末位為0的小數部分,保留一位小數
a = 100
print(type(a),a) #<class 'int'> 100b = str(a)
print(type(b),b) #<class 'str'> 100st = str(-1.8)
print(type(st),st) #<class 'str'> -1.8st1 = str(-1.00000)
print(type(st1),st1) #<class 'str'> -1.0st2 = str(-1.02300)
print(type(st2),st2) #<class 'str'> -1.023
轉換列表:
list = [1,2,3]
st = str(list)
print(type(st),st) #<class 'str'> [1, 2, 3]
1.4 eval (x):用來計算在字符串中的有效python表達式,并返回表達式的值
eval非常長強大,但不夠安全,容易被惡意修改數據
print(10+10) #20
print('10'+'10') #1010
print('10+10') #10+10
print(eval('10+10')) #20 執行運算,并返回運算值
eval()可以實現list、dict、tuple和str之間的轉換;相當于去掉字符串的引號
st1 = '[[1,2],[3,4],[5,6]]'
print(type(st1),st1) #<class 'str'> [[1,2],[3,4],[5,6]]li = eval(st1)
print(type(li),li) #<class 'list'> [[1, 2], [3, 4], [5, 6]]
st2 = "{'name':'panda','age':5}"
print(type(st2),st2) #<class 'str'> {'name':'panda','age':5}
dic = eval(st2)
print(type(dic),dic) #<class 'dict'> {'name':'panda','age':5}
1.5 tuple(x):將可迭代對象轉換為元組類型
list = [1,2,3,4]
tua = tuple(list)
print(tua,type(tua)) #(1, 2, 3, 4) <class 'tuple'>
1.6 list(x):將可迭代對象轉換為列表類型
支持轉換為list的類型:str 、tuple、dict、set
字典轉換成列表,會取鍵名作為列表的值。
集合轉化成列表會先去重,在轉換(字母無序)。
print(list('abcdef')) #['a','b','c','d','e','f']
print(list((1,2,3,4))) #[1,2,3,4]
print(list({'name':'panda','age':5})) #['name','age']
print(list({'a','b','c','b'})) #['c','b','a']
2.深淺拷貝(只針對可變對象)
2.1賦值:對于列表,字典,集合這種類型,復制就等于完全共享資源,一個值的改變會完全被另一個值共享。賦值后的對象會隨著原對象一起變換。
li = [1,2,3,4]
li2 = li
print('li',li) #li [1, 2, 3, 4]
print('li2',li2) #li2 [1, 2, 3, 4]
li.append(5)
print('賦值后:li',li) #賦值后:li [1, 2, 3, 4, 5]
print('賦值后:li2',li2) #賦值后:li2 [1, 2, 3, 4, 5]
2.2淺拷貝(數據半共享)
會創建新的對象,拷貝第一層的數據,嵌套層會指向原來的內存地址
首先需要導入copy模塊
查看內存地址:id()
外層的內存地址不同,內層的內存地址相同。大多數形況下都使用淺拷貝
優點:拷貝速度快,且占用空間少,拷貝效率高。
import copy #導入copy模塊li = [1,2,3,[4,5,6]]
li2 = copy.copy(li) #淺拷貝
print('li',li) #li [1, 2, 3, [4, 5, 6]]
print('li2',li2) #li2 [1, 2, 3, [4, 5, 6]]
print(id(li)) #2256239241864
print(id(li2)) #2256239241992內存地址不一樣,不是同一對象
li.append(8)
print('賦值后:li', li) #賦值后:li [1, 2, 3, [4, 5, 6],8]
print('賦值后:li2', li2) #賦值后:li [1, 2, 3, [4, 5, 6]]li[3].append(7) #往嵌套列表添加元素
print('賦值后:li', li) #賦值后:li [1, 2, 3, [4, 5, 6,7],8]
print('賦值后:li2', li2) #賦值后:li [1, 2, 3, [4, 5, 6,7]]
print(id(li[3])) #2288402279240
print(id(li2[3])) #2288402279240 內存地址相同
2.3深拷貝(數據完全不共享)
外層對象和內層元素都拷貝一遍,深拷貝數據變化只影響自己本身,和原來的對象沒有關聯。
也要導入copy模塊
import copy #導入copy模塊
li = [1,2,3,[4,5,6]]
li2 = copy.deepcopy(li)
print('li',li) #li [1, 2, 3, [4, 5, 6]]
print('li2',li2) #li2 [1, 2, 3, [4, 5, 6]]
print(id(li)) #2704884215048
print(id(li2)) #2704884214792內存地址不一樣,不是同一對象
li.append(8)
print('賦值后:li', li) #賦值后:li [1, 2, 3, [4, 5, 6],8]
print('賦值后:li2', li2) #賦值后:li [1, 2, 3, [4, 5, 6]]li[3].append(7) #往嵌套列表添加元素
print('賦值后:li', li) #賦值后:li [1, 2, 3, [4, 5, 6,7],8]
print('賦值后:li2', li2) #賦值后:li [1, 2, 3, [4, 5, 6,]]
print(id(li[3])) #2704883434440
print(id(li2[3])) #2704884215304 內存地址不同
3.可變對象
含義:存儲空間保存的數據允許被修改,這種數據就是可變類型(變量對應的值可以被修改,但是內存地址不會發生改變)
常見的可變類型:列表(list)、字典(dict)、集合(set)??
li = [1,2,3,4]
print(li,id(li)) #[1, 2, 3, 4] 1886619741320
li.append(5) #添加元素
print(li,id(li)) #[1, 2, 3, 4, 5] 1886619741320dic = {'name':'pande','age':5}
print(dic,id(dic)) #{'name': 'pande', 'age': 5} 2103573679704
dic['name'] = 'monkey' #修改元素
print(dic,id(dic)) #{'name': 'monkey', 'age': 5} 2103573679704set = {1,2,3,4,5}
print(set,id(set)) #{1, 2, 3, 4, 5} 2769478186152
set.remove(3) #刪除元素
print(set,id(set)) #{1, 2, 4, 5} 2769478186152
4.不可變對象
含義:存儲空間保存的數據不允許被修改,這種數據就是不可變類型(變量對應的值不能被修改,修改的話就會生成新的值,從而分配新的內存空間)
常見的不可變類型:數值類型(int 、bool、float、complex)、字符串(str)、元組(tuple)
元組不支持新增修改和刪除操作。
n = 10
print(n,id(n)) #10 140719911371312
n = 15
print(n,id(n)) #15 140719911371472str = 'hello'
print(str,id(str)) #hello 2348660297456
str = 'world'
print(str,id(str)) #world 2348660297520tua = (1,2,3)
print(tua,id(tua)) #(1, 2, 3) 1535623178104
tua =('a','b','c')
print(tua,id(tua)) #('a', 'b', 'c') 1535623178504