前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3 == 和 is 的区别

Python3 == 和 is 的区别

作者头像
py3study
发布2020-01-08 17:06:36
4030
发布2020-01-08 17:06:36
举报
文章被收录于专栏:python3

Python3 == 和 is 的区别


本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/79383063


以下代码以Python3.6.1为例 Less is more! is 判断两个对象是否为同一对象, 是通过id来判断的; 当两个基本类型数据(或元组)内容相同时, id会相同, 但并不代表a会随b的改变而改变 == 判断两个对象的内容是否相同, 是通过调用eq()来判断的

代码语言:javascript
复制
#!/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

def demo():
    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的值并未随之改变
    # 不管是深拷贝, 还是浅拷贝, 结果都是一样的, 原因详见: [深浅拷贝文章](http://blog.csdn.net/rozol/article/details/71156387)

    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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python3 == 和 is 的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档