Python的dict一个诡异的问题

# -*- coding:utf-8 -*-

import os
from os import system
import socket
import traceback
import time
import datetime
import random
import json

def get_merge_server_ip():
    return socket.gethostbyname(socket.gethostname())

def test_1():
    MERGE_SERVER_IP_MAPPING_NUMBER={'127.0.0.1':1, '10.103.13.153':153, '10.103.13.155':155, '10.103.13.172':172}
    a_key = '127.0.0.1'
    print 'test_1==', type(a_key)  #<type 'str'>
    print 'test_1==', a_key        # 127.0.0.1
    print 'len_1==',len(a_key)     # 9
    print 'id_1==',id(a_key)       # 140486280156720

    return MERGE_SERVER_IP_MAPPING_NUMBER.has_key(a_key)

def test_2():
    MERGE_SERVER_IP_MAPPING_NUMBER={'127.0.0.1':1, '10.103.13.153':153, '10.103.13.155':155, '10.103.13.172':172}
    a_key = get_merge_server_ip()
    print 'test_2==', type(a_key) #<type 'str'>
    print 'test_2==', a_key       # 127.0.1.1
    print 'len_2==',len(a_key)     # 9
    print 'id_2==',id(a_key)      # 140486279882480

    return MERGE_SERVER_IP_MAPPING_NUMBER.has_key(a_key)


if __name__=='__main__':

    value_1 = test_1()
    value_2 = test_2()

    print 'value_1==', value_1 # result is True
    print 'value_2==', value_2 # result is False

定义一个名为MERGE_SERVER_IP_MAPPING_NUMBER的dict对象,如果key为‘127.0.0.1’,则dict认为包含了该key;如果key为获取本地的ip地址,值也是‘127.0.0.1’,则dict认为不包含该key,dict对象是以什么依据判断是否包含某个key的呢?代码如下:


输出结果:

/usr/bin/python2.7 /home/TestDIct.py
test_1== <type 'str'>
test_1== 127.0.0.1
len_1== 9
id_1== 140486280156720
test_2== <type 'str'>
test_2== 127.0.1.1
len_2== 9
id_2== 140486279882480
value_1== True
value_2== False

Process finished with exit code 0


你可能感兴趣的:(python,key,dict)