创建不同的对象或相同的取决于类型(基本Python)

问题描述:

我已经阅读了有关python如何创建对象并将这些作为变量分配给它的“标记”。但是,我发现如果有两个字符串或整数具有相同的值,那么它只会为它分配一个内存点,与列表,元组和元素不同。有一种情况发生时,是否有规则或类型列表?特别是,如果我设置创建不同的对象或相同的取决于类型(基本Python)

>>> x,y='a','a' 
>>> x is y 
True 
>>> x,y=1,1 
>>> x is y 
True 

但在另一方面,如果我做

>>> x,y={'a':1},{'a':1} 
>>> x is y 
False 
>>> x,y=(1,),(1,) 
>>> x is y 
False 
>>> x,y=[1],[1] 
>>> x is y 
False 
+0

有两个原因:Python在代码常量中存储不可变的文字并重用这些常量,*和*也是有效标识符的字符串文字被实现(同一个字符串对象被重复使用而不是创建新实例)。 – 2014-10-28 12:22:35

字符串是Python中不可改变和重用。字典不是,因此不能被重用。新的创建。这只是偶然,他们有相同的键和值。

+0

这就是我最初想的,但是元组vs列表呢?第一个是不可变的,而列表不是,但是它仍然在内存中构造两个不同的对象。但它不适用于字符串和整数,即简单类型。 – Medan 2014-10-28 16:41:04

+0

好问题。不同之处在于CPython [interns strings](http://*.com/questions/15541404/python-string-interning)。列表和元组不被重复使用,因此不会被重用。 – 2014-10-28 17:42:18