本文由 luzhuo 編寫,**請保留該資訊.
原文:
以下**以python3.6.1為例less is more!
is 判斷兩個物件是否為同一物件, 是通過id來判斷的; 當兩個基本型別資料(或元組)內容相同時, id會相同, 但並不代表a會隨b的改變而改變
== 判斷兩個物件的內容是否相同, 是通過呼叫eq()來判斷的
#!/usr/bin/env python
# coding=utf-8
__author__ = 'luzhuo'
__date__ = '2017/5/19'
# equal_is_demo.py == 和 is 的區別
# == 和 is 的區別:
# is 判斷兩個物件是否為同一物件, 是通過id來判斷的; 當兩個基本型別資料(或元組)內容相同時, id會相同, 但並不代表a會隨b的改變而改變
# == 判斷兩個物件的內容是否相同, 是通過呼叫__eq__()來判斷的
import copy
defdemo
(): list_1 = [123]
list_2 = [123]
tup_1 = (123)
tup_2 = (123)
# --- is 判斷兩個物件是否為同一物件, 是通過id來判斷的 ---
print("id_list_1: {}; id_list_2: {}; list_1 is list_1: {}".format(id(list_1), id(list_2), list_1 is list_2))
print("id_tup_1: {}; id_tup_2: {}; tup_1 is tup_2: {}".format(id(tup_1), id(tup_2), tup_1 is tup_2))
# 輸出結果: 兩列表id不同, is返回為false, 說明是根據id來判斷的, 且非指向同一物件
# id_list_1: 109701200; id_list_2: 109701040; list_1 is list_1: false
# id_tup_1: 1485463184; id_tup_2: 1485463184; tup_1 is tup_2: true
# --- == 判斷兩個物件的內容是否相同, 是通過呼叫__eq__()來判斷的 ---
print("id_list_1: {}; id_list_2: {}; list_1 == list_1: {}".format(id(list_1), id(list_2), list_1 == list_2))
print("id_tup_1: {}; id_tup_2: {}; tup_1 == tup_2: {}".format(id(tup_1), id(tup_2), tup_1 == tup_2))
# 輸出結果: 不管id是否相同, 內容相同, ==返回都是true
# id_list_1: 109701200; id_list_2: 109701040; list_1 == list_1: true
# id_tup_1: 1485463184; id_tup_2: 1485463184; tup_1 == tup_2: true
# *****=
# --- 注: 當兩個基本型別資料(或元組)內容相同時, id會相同, 但並不代表a會隨b的改變而改變 ---
temp_1 = 123
temp_2 = copy.copy(temp_1)
print("id_temp_1: {}; id_temp_2: {}; temp_1 is temp_2: {}; temp_1 == temp_2: {}".format(id(temp_1), id(temp_2), temp_1 is temp_2, temp_1 == temp_2))
# 輸出結果: 此時他們具有相同的id, 相同的值, 所以is和==都返回true
# id_temp_1: 1485463184; id_temp_2: 1485463184; temp_1 is temp_2: true; temp_1 == temp_2: true
# 他們具有相同的id是因為基本資料型別(和元組)的內容相同, 所以為指向同一記憶體
# 如果我們修改temp_2的值, 那麼temp_2的id也就隨之改變, 而temp_1的值並未隨之改變
# 不管是深拷貝, 還是淺拷貝, 結果都是一樣的, 原因詳見: [深淺拷貝文章](
temp_2 = 456
print("temp_1: {}; temp_2: {}".format(temp_1, temp_2));
print("id_temp_1: {}; id_temp_2: {}; temp_1 is temp_2: {}; temp_1 == temp_2: {}".format(id(temp_1), id(temp_2), temp_1 is temp_2, temp_1 == temp_2))
# 輸出結果: temp_2的id和內容都改變了, 所以is和==都返回false
# temp_1: 123; temp_2: 456
# id_temp_1: 1485463184; id_temp_2: 109502000; temp_1 is temp_2: false; temp_1 == temp_2: false
if __name__ == "__main__":
demo()
python3和2的區別
1.print函式 python2中的print語句,被python3中的print 函式取代。print hello world 執行結果 python2中同時輸出多個物件時,會建立乙個元組,因為python2中,print是乙個語句,而不是函式呼叫。2.整數除法 python2 print 3 ...
Python3中is和 的區別?
1.背景 1 變數 記憶體理解 變數 用來標識 identify 一塊記憶體區域。為了方便表示記憶體,我們操作變數實質上是在操作變數指向的那塊記憶體單元。編譯器負責分配。我們可以使用python內建函式id 來獲取變數的位址。變數名 是乙個識別符號 dientify 用來代之一塊記憶體空間,使用這個...
python3和python2的區別
1.效能 py3.0執行 pystone benchmark的速度比py2.5慢30 guido認為py3.0有極大的優化空間,在字串和整形操作上可 以取得很好的優化結果。py3.1效能比py2.5慢15 還有很大的提公升空間。2.編碼 py3.x原始碼檔案預設使用utf 8編碼,這就使得以下 是合...