首先让我说我认为数据存储在python中的工作方式是一切都是一个对象所以不需要像指针这样的东西。如果将一段数据传递给函数,那么该函数就具有真实的数据。退出该函数时,传入的数据可能已被修改。
现在我正在使用列表,我认为如果我将相同的数据放在两个列表上,那么在一个地方修改它会在另一个地方修改它。
如何在两个或更多不同的列表中包含一个数据?我想在一个地方更改这些数据,然后进行另一个更改。
例如,请采取以下措施:
p = 9
d = []
f = []
d.append(p)
f.append(p)
print 'd',d
print 'f',f
p = 3
print 'd',d
print 'f',f
运行此命令时输出为:
d [9]
f [9]
d [9]
f [9]
我希望第二组数据为3,但它似乎不起作用。那么在我的思考过程中我哪里出错了?将数据放入列表时是否存在隐式复制操作?
答案 0 :(得分:3)
首先,整数(实际上是数字对象)是不可变的。没有“修改”这个“数据”。 其次,Python中还有name binding的概念。当你这样做时:
p = 9
发生两件事:首先,创建一个数字对象(9
);第二,然后绑定到名称p
。
以后做的时候:
p = 3
正如您所想,它不会“修改”先前创建的不可变数字对象。这简单地做了两件事:首先,创建一个新的数字对象(3
);第二,然后绑定到名称p
。
Pictorally:
(1a) 9
(1b) p --> 9
(2a) p --> 9
3
(2b) 9
p --> 3
答案 1 :(得分:2)
您的第二个作业不会更改绑定到p
的对象的值,它会将p
重新绑定到一个全新的对象。 d
和f
仍包含对旧对象的引用,旧对象仍具有相同的值。