Python3 和 is 的區別

2021-08-15 20:06:32 字數 2766 閱讀 5049

本文由 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編碼,這就使得以下 是合...