python(12): 比较、真值等杂项
时间:2006-02-25 来源:newsim
在python中,一切变量都是引用变量。这有时候非常有用,但有时候也会造成麻烦。比如:
由此可见用L[:]方式产生一个新的list是不完全的拷贝,类似的dictionary也是不完全的拷贝。它只拷贝了第一层,如果需要完全的拷贝,那么就要用到copy这个模块。
在python中有两种比较相等于的运算符一个是==,另一个是is。他们之间是有区别的,==用于比较内容是否相同,is比较是否是同一对象。比如:
在python中一切都是对象(这好像是第三次写到这句话了)。内置函数type(object)可以回object的类型信息。isinstance(object, types or tuple of types)可以用来比较object是否是第二能数中标明的类型。在types中还定义了好多类型的名字,比如list有别名ListType,dict有DictType,type有TypeType等等。以前一直以为在types模块中再设一些别名是多此一举,不过认真想了一想,发现这有其自己的逻辑。假设要判断一个对象object是不是str类型。可惟采用下面的方法:
如果一个list把它本身作为一个成员就会出现无限循环的情况,在python用[...]来表示无限循环,一般应该避免出现这种情况。tuple dictionary也有类似的情况
- >>> L = [1, 2]
- >>> X = [0, L, 3]
- >>> X = [0, L[:], 3]
- >>> L = [0, [1, 2, 3], 4]
- >>> X = ['A', L[:], 5]
- >>> L[1][1]= 'B'
- 把L中第一个指针指向的内容也就是0复制一份,把其地址作为返回list的第一个值
- 把L中第二个指针指向的内容也就是保存有[1,2,3]中对象1 2 3的指针也复制一份,作为返回list的第二个值返回
- 把L中第三个指针指向的内容也就是4复制一份,作为返回list的第三个值返回
由此可见用L[:]方式产生一个新的list是不完全的拷贝,类似的dictionary也是不完全的拷贝。它只拷贝了第一层,如果需要完全的拷贝,那么就要用到copy这个模块。
- >>> import copy
- >>> copy.deepcopy(L)
在python中有两种比较相等于的运算符一个是==,另一个是is。他们之间是有区别的,==用于比较内容是否相同,is比较是否是同一对象。比如:
- >>> one = "hello world"
- >>> two = "hello world"
- >>> one == two, one is two
- (1,0)
在python中一切都是对象(这好像是第三次写到这句话了)。内置函数type(object)可以回object的类型信息。isinstance(object, types or tuple of types)可以用来比较object是否是第二能数中标明的类型。在types中还定义了好多类型的名字,比如list有别名ListType,dict有DictType,type有TypeType等等。以前一直以为在types模块中再设一些别名是多此一举,不过认真想了一想,发现这有其自己的逻辑。假设要判断一个对象object是不是str类型。可惟采用下面的方法:
- isinstance(object, str)
- type(object) == type(str())
- type(object) == types.StringType
如果一个list把它本身作为一个成员就会出现无限循环的情况,在python用[...]来表示无限循环,一般应该避免出现这种情况。tuple dictionary也有类似的情况
相关阅读 更多 +