Python入門:Python變量和賦值

公衆號:尤而小屋
作者:Peter
編輯:Peter

大家好,我是Peter~

今天給大家帶來的是一篇關於Python變量與賦值的文章。

其實Python中的賦值語句我們在之前的學習過程已經接觸了很多,比如a=1,就是將數值1賦值給變量a。

在正式介紹賦值語句之前,我們先了解下Python中的變量問題。

環境

有讀者反映建議Peter寫下文章的環境,這就來了:

  • 系統:MacOS
  • 工具:jupyter notebook
  • Python版本:3.7.5
  • 文檔編輯器:Typora

變量

深刻理解變量的內存地址

變量可以說是一個存放數據的容器。Python中在定義變量的時候,不需要聲明變量。當我們首次爲變量賦值的時候,會自動創建變量並指定類型。

變量本身是沒有類型的,只是對象(賦值的數據)有類型

a = 66
a
66
b = 66
b
66
type(a)  # 查看數值類型爲整型int
int
type(b)  # 字符串類型
int

我們定義了兩個變量a和b,它們都是數字66。雖然名稱不同,但是在計算機中它們卻代表的是同一個元素,看看他們的內存地址。

就好比:豬八戒(數值66)這個人,我們可以稱之爲“二師兄”(放在變量a),也可以稱之爲“天蓬元帥”(放在變量b),但是本質上他們都是指豬八戒,只是換了個別名,本質相同

id(a)  # a和b的內存地址相同
4387310752
id(b)
4387310752

我們再定義一個變量的賦值看看:

a = 77
a
77
id(a)
4387311104

我們看到,之前我們把數值66賦值給變量a,內存地址是4430785696,然後我們又把數值77賦值爲變量a,內存地址變成了4430786048。

爲什麼?其實,這兩數值66和77本質上在計算機就是兩個對象,只不過它們剛好有個相同的名字而已。好比說,西遊記有個情節:真假美猴王

真美猴王(數值66)和假美猴王(數值77)雖然都被稱爲猴子(標籤a),但是他們實際上是兩隻不同的猴子呀(分配了不同的地址)~假的最後不還是被如來給收服啦!

創建變量

通過賦值語句來實現變量的創建

x = 99  # 數值型
language = "python"  # 字符串型
number = [1,3,5,7,9]  # 列表型

print(x)
print(language)
print(number)
99
python
[1, 3, 5, 7, 9]

變量名稱命名規則

python中變量的命名可以使用短名稱,比如上面的x、y、z、a、b等,也可以使用具有一定描述作用的名稱,比如age、name、sex,其他人看到就可以知道變量的含義。通常Python中的變量命名規則:

  • 變量名必須以字母或下劃線字符開頭,不能以數字開頭
  • 變量名只能包含字母數字字符和下劃線(A-z、0-9 和 _)
  • 變量名稱區分大小寫(name、Name 和 NAME 就是三個不同的變量)
  • 變量名不能和Python中的關鍵字衝突(相同),否則無效

下面我們看看Python中常見的賦值方法

賦值語句

常規賦值

賦值:將Python的某個數據對象貼在某個變量上,好像給這個對象貼上了一個標籤。Python 使用等號=作爲賦值運算符,具體格式爲:

name = value

# 變量 = 某個值
list1 = ["python","java"]  # 列表賦值給變量b
list1
['python', 'java']
list2 = [1,2,["python","html"],(1,4,7)]  # 嵌套列表
list2
[1, 2, ['python', 'html'], (1, 4, 7)]
age = 28  # 數值
age
28
information = "xiaoming is a boy"  # 字符串
information
'xiaoming is a boy'
# 定義一個變量dic,字典類型

dic = {"name":"xiaoming","age":20,"sex":"fale"}
dic
{'name': 'xiaoming', 'age': 20, 'sex': 'fale'}

多變量賦值

同時賦值3個變量

m, n, o= 22, "xiaoming","男"  # 同時賦值3個變量
m
22
n
'xiaoming'
o
'男'

上面的例子表示22賦值給m,字符串對象"xiaoming"賦值給n,"男"賦值給變量o

name, age = ("Peter",20)  # 通過元組形式賦值
name
'Peter'
age
20

上面的例子通過Python元組的形式進行了鏈式賦值

鏈式賦值

x1 = y1 = 33
x1
33
y1
33

在上面的例子中我們通過鏈式賦值同時定義了兩個變量x1和y1。其實它們在內存中就是同一個對象,通過id查看內存地址:

id(x1)
4387309696
id(y1)
4387309696

其實就是同一個python對象貼上了不同的標籤而已,但是本質相同

變量互換

k, j = 9, 5

上面的變量賦值等價於:

k=9
j=5
print("k =",k)
print("j =",j)
k = 9
j = 5
print("id(k): ", id(k))
print("id(j): ", id(j))
id(k):  4387308928
id(j):  4387308800

下面我們交換kj兩個變量的值:

k, j = j, k  # 變量值的交換

上面語句的含義表示爲:將變量j的值(已經賦值了5)再賦值給變量k;將變量的值(已經賦值了9)再賦值給變量j;

print("k =",k)
print("j =",j)
k = 5
j = 9
print("id(k): ", id(k))
print("id(j): ", id(j))
id(k):  4387308800
id(j):  4387308928

通過對比交換前後兩個變量的內存地址,我們發現:內存地址交換了,也就是變量已經發生了交換

在其他編程語言中實現變量值的交換的操作是(假設已經定義了兩個變量a和b):

temp = a  # a賦值中間變量temp
a = b     # b的值賦給變量a
b = temp  # temp的值賦給變量b

變量的相等和相同

首先,必須聲明的是Python中變量的相等和相同,是不同的兩個概念,舉例子說明

number1 = 88
number2 = 88
id(number1)
4387311456
id(number2)
4387311456

判斷兩個變量是否相等:使用==

number1 == number2
True

判斷兩個變量是否相同:使用is

number1 is number2
True

結果都是True,說明number1和number2兩個變量就是同一個對象

list1 = "hello python" 
list2 = "hello python"
list1 == list2  # 相等
True
list1 is list2  # 不相同
False

上面的結果表明:list1和list2是相等,但是不相同。

id(list1)
4444494000
id(list2)
4444495024

通過查看二者的內存地址發現:它們的地址真的不同,所以肯定是不相同的兩個對象。

我們再看最後一個情況:

number3 = 1000
number4 = 1000
number3 == number4  # 相等
True
number3 is number4  # 居然不相等啦!
False

我們查看下二者的內存地址,發現它們的地址真的不同,所以肯定不是同一個對象啦~

id(number3)
4444408880
id(number4)
4444409104

這到底是爲什麼呢?以後揭曉~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章