创建不同的对象或相同的取决于类型(基本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
字符串是Python中不可改变和重用。字典不是,因此不能被重用。新的创建。这只是偶然,他们有相同的键和值。
这就是我最初想的,但是元组vs列表呢?第一个是不可变的,而列表不是,但是它仍然在内存中构造两个不同的对象。但它不适用于字符串和整数,即简单类型。 – Medan 2014-10-28 16:41:04
好问题。不同之处在于CPython [interns strings](http://stackoverflow.com/questions/15541404/python-string-interning)。列表和元组不被重复使用,因此不会被重用。 – 2014-10-28 17:42:18
有两个原因:Python在代码常量中存储不可变的文字并重用这些常量,*和*也是有效标识符的字符串文字被实现(同一个字符串对象被重复使用而不是创建新实例)。 – 2014-10-28 12:22:35