Possible Duplicate:
Assignment of objects and fundamental types
a = [1,2,3]
b = a
print b is a
此代码打印为真。为什么?”is“只有当两个变量指向同一个对象时才返回True,在本例中,它们是具有相同值的不同对象。”=”将返回True,但“is”不应返回
但是,自从
b.reverse()
print a,b
打印[3,2,1][3,2,1],似乎就解释器而言,它们是同一个对象,对b的操作将自动在a上执行。再说一遍,为什么?我以前从没见过这样的事。
它们实际上引用的是同一个对象。
试试这个:
你会看到a和b都改变了,仍然是一样的。
当您执行
a = [1, 2, 3]
操作时,您将名称a
绑定到列表对象。当您执行b = a
时,您将名称b
绑定到任何a
上—在本例中是list对象。所以,他们是一样的。。。一个对象可以有多个名称。值得一读Python Data Model。如果您想制作listobj的副本,那么可以查看
b = a[:]
来使用slice创建浅副本,或者copy.copy
来创建浅副本(应该在任意对象上工作),或者copy.deepcopy
来创建奇怪的深副本。您还将注意到CPython中一些令人惊讶的东西,它缓存短字符串/小整数。。。
这就是这里实际发生的情况:
比如说:
何时使用^{} 模块:
有关详细信息:
相关问题 更多 >
编程相关推荐