请解释这两个代码之间的区别

时间:2013-07-14 16:21:32

标签: python

代码1

nums = [1, 2, 3]
tri = nums
nums.append(4)
print(tri)       //this prints [1, 2, 3, 4]

代码2

num = 9
num2 = num
num = 12
print num2       // this prints 9 **BUT I expected 12 like abouve code**

我的问题是当程序和作业几乎相似时,为什么这两个输出之间存在差异?

3 个答案:

答案 0 :(得分:4)

在第一个示例中,numstri引用相同的对象。 append方法修改了引用对象,因此numstri继续引用相同(已修改)的对象。

在第二个例子中,num被设置为一个全新的对象(12); num2继续引用在更改其值之前num引用的对象(9)。

答案 1 :(得分:0)

nums是一个列表,因此它通过引用复制,num按值复制。

您可以使用tri = nums[:]按值复制nums

答案 2 :(得分:-1)

代码1你使用元组。元组是引用类型数据。 (阵列,元组,类)

代码2是您使用的整数。它是类型数据。

值类型始终将值复制到另一个内存位置。

但是引用数据类型总是将值替换为内存位置。

这个概念带有面向对象的编程。