在两个列表之间共享数据

时间:2011-02-08 04:55:22

标签: python list

首先让我说我认为数据存储在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,但它似乎不起作用。那么在我的思考过程中我哪里出错了?将数据放入列表时是否存在隐式复制操作?

2 个答案:

答案 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重新绑定到一个全新的对象。 df仍包含对旧对象的引用,旧对象仍具有相同的值。