1. 程式人生 > >Python基礎資料型別補充及深淺拷貝

Python基礎資料型別補充及深淺拷貝

-*-coding:utf-8 -*-
ascii 不支援中文
gbk 支援中文 2個位元組 包含ascii碼
unicode 萬國碼 python3 記憶體unicode
utf-8 可變的長 英文 1 位元組 歐洲2個位元組 亞洲3個位元組

unicode 記憶體
硬碟 utf-8 位元組 儲存 傳送

s = '澳門'
a = 'alexsb'
s1 = s.encode('utf-8') # 編碼 編碼集
print(s1) # b'\xe6\xbe\xb3\xe9\x97\xa8'
print(s1.decode('utf-8'))
a1 = a.encode('utf-8') # b'alexsb'
print(a1)
s2 = s.encode('gbk')
print(s2) # b'\xb0\xc4\xc3\xc5'
a2 = a.encode('gbk') # b'alexsb'
print(a2)
s3 = s.encode('utf-8')
print(s3.decode('gbk')) # 不能使得

s = 'alex'
s1 = s.encode('utf-8') # 編碼 utf-8 包含了ascii
print(s1.decode('gbk')) # 解碼 gbk 包含了ascii

應用場景: 檔案操作 網路傳輸 網路程式設計

坑 基礎資料補充

li = [1,2,3,4,5,0,0,0,0,0,0,0,0,0]

for i in li:
li.append(0)
print(li) # [1,2,3,4,5,0,0,0,0,0]

li = [12,2,3,4,5]
for i in li:
li.append(i)
print(li)
print(li)


for i in li:
li.remove(i)
print(li) # 結果[2,4]

for i in li:
li.pop()
print(li)



li = [1,2,3,4,5]
for i in li:
del li[-1]
print(li)





for i in range(len(li)): # 行
li.pop()
print(li)

li = [1,2,3,4,5] # 行
l2 = []
for i in li:
l2.append(i)
for j in l2:
li.remove(j)
print(li)

for i in li:
li.clear() # 實在不行的
print(li)

dic = {'1':22,'5':'22'}
for i in dic:
dic['6'] = 1
print(dic)

lst = []
for i in dic:
lst.append(i) # 每個字典的鍵
for j in lst:
dic.pop(j)
print(dic)


dic = dict.fromkeys('年後啊','消愁')

第一個位置是可迭代物件,也就是字典的鍵
第二個位置 不寫是None 也就是字典的值

print(dic)
dic['年'] = '今天老子不上班' # 字串不能修改
print(dic)

dic['你'] = [5,6,7]
print(dic)
dic = dict.fromkeys('你好啊',[1,2,3])
print(dic)
dic['你'].append(99)
print(dic)

深淺拷貝

li = [1,2,3,4]
lst = li.copy()
print(li)
print(lst)

print(id(li)) # 34512776
print(id(lst)) # 34512840

li[0] = 56
print(li) # 變
print(lst) # 不變



print(id(li[0])) # 1548382960
print(id(lst[0])) # 1548381200

print(id(li[1])) # 1548381232
print(id(lst[1])) # 1548381232


li = [1,2,3,4,[5,6,7]] # 淺拷貝只拷貝一層元素
lst = li.copy()
# print(li)
# print(lst)

li[-1].append(90)
print(li) # 變
print(lst) # 變

print(id(li[-1]))
print(id(lst[-1]))


li = [1,2,3,4] # 賦值
lst = li
print(li)
print(lst)

li[0] = 56
print(li)
print(lst)

import copy

li = [1,2,3,4,[5,6,7]]
lst = copy.deepcopy(li) # 深拷貝
# 淺拷貝只拷貝第一層元素,元素是不可變的,就不會變 元素是可變的倆個同時變
print(li)
print(lst)
print(id(li)) # 40289984
print(id(lst)) # 40305368

li[-1].append(90)
print(li) # 變
print(lst) # 不變

print(id(li[-1])) #38783856
print(id(lst[-1])) #38798000

import copy

li = [1,2,3,4,[5,6,7]]

lst = copy.deepcopy(li)

print(id(lst[-2])) # 39584432
print(id(li[-2])) # 39570288

面試題:

li = [1,2] # li = [1,[1,[1,[1,2]]]]
li[1] = li
print(li)
結果 [1, [...]]

is == 區別

a = 1000
b = 1000
print(a == b)
print(id(a))
print(id(b))
print(a is b) # is 是

== 比較兩邊的值 # 看這倆人是不是長得一樣
is 比較兩邊的記憶體地址 # 判斷是不是一個 身份證號


程式碼塊

def func():
a = '
[email protected]
'* 20
print(id(a))
def func1():
b = '[email protected]'* 20
print(id(b))
print(func(),func1())

a = 100000000
b = 100000000
c = 100000000
d = 100000000

一個檔案就是一個程式碼塊:

print(a is b) # 節省資源


程式碼塊機制:

數字: -5 ~ 256
字串: 乘法的時候總長度不能超過20

程式碼塊 > 小資料

s = '222222222222222222222222222222222222222222222222222222'
f = '222222222222222222222222222222222222222222222222222222'

print(s is f)

s = 'asdsr' * -50
d = 'asdsr' * -50
print(s is d)

a = '12221341asdfadsfasxzvdasfasdfewfwfvxasgfrqegvewrgavrgvaerg'
b = '12221341asdfadsfasxzvdasfasdfewfwfvxasgfrqegvewrgavrgvaerg'

a = '@'* 2
b = '@'* 2