1. 程式人生 > >Python學習--編碼和變數的記憶體問題

Python學習--編碼和變數的記憶體問題

編碼問題

一.Python2

預設為ascii碼,使用時需要使用

# -*- encoding:utf-8 -*-

二.Python3

預設為utf-8

編碼方式 解釋
unicode 一個位元組表示所有英文、特殊字元、數字等,用四個位元組表示中文(過於浪費資源)
utf-8 unicode升級版,用三個位元組表示一箇中文字
gbk 中國國內使用,一箇中文字兩個位元組

tips:不同編碼方式之間不能解析彼此的二進位制碼

  1. 字串編碼
    記憶體中str型預設使用unicode,不能用於儲存和傳輸使用(佔用過多空間,僅在轉碼時借用),需要轉碼成bytes型別(使用utf-8等格式編碼),可用於傳輸和儲存。

1.英文表示

s = 'alex'
print(s, type(s))
s1 = b'alex'
print(s1, type(s1))
alex <class 'str'>  # unicode編碼
b'alex' <class 'bytes'>  # utf-8...編碼

2.中文表示

s = '程式設計師'
print(s, type(s))
s1 = '程式設計師'.encode('utf-8')  # 預設為utf-8
print(s1, type(s1))
程式設計師 <class 'str'>  # unicode編碼
b'\xe7\xa8\x8b\xe5\xba\x8f\xe5\x91\x98' <class 'bytes'>  # 16進製表示,一箇中文字3個位元組

tips: python3中用encode,通過型別轉換來進行編碼轉換

記憶體問題

int型和str型的變數在一定範圍內會儲存在同一個小資料池中,以此來減少記憶體消耗。
id():返回記憶體地址,等同於c++的指標

s1 = 2
s2 = 257
print(id(s1), id(s2))
1905683232 2468906249936