Python 请解释这两种代码之间的区别
代码1 代码2Python 请解释这两种代码之间的区别,python,Python,代码1 代码2 nums = [1, 2, 3] tri = nums nums.append(4) print(tri) //this prints [1, 2, 3, 4] 我的问题是,当过程和赋值几乎相似时,为什么这两个输出之间存在差异?在第一个示例中,nums和tri引用相同的对象。append方法在适当的位置修改引用对象,因此nums和tri都继续引用相同的(修改过的)对象 在第二个示例中,num被设置为一个全新的对象(12)num2继续引用在更改其值之前num引用的对象
nums = [1, 2, 3]
tri = nums
nums.append(4)
print(tri) //this prints [1, 2, 3, 4]
我的问题是,当过程和赋值几乎相似时,为什么这两个输出之间存在差异?在第一个示例中,
nums
和tri
引用相同的对象。append
方法在适当的位置修改引用对象,因此nums
和tri
都继续引用相同的(修改过的)对象
在第二个示例中,
num
被设置为一个全新的对象(12)num2
继续引用在更改其值之前num
引用的对象(9)。nums是一个列表,因此它是按引用复制的,num是按值复制的
您可以使用
tri=nums[:]
通过值来复制numscode 1使用元组。元组是引用类型数据。(数组、元组、类)
代码2是您使用的整数。它是值类型数据
值类型始终将值复制到另一个内存位置
但引用数据类型总是将值替换为内存位置
这个概念来自面向对象编程。我试图让代码像您一样可见。。但是我失败了:(抱歉给你带来不便,对不起,我之前的评论太尖刻了;我现在明白你的问题了,我正在发布一个答案。相关阅读:@delnan:太好了!我刚刚在HAckerNews上读了那篇文章并玩了一下Thanks@MohitAphale与那篇文章的主要区别是:重新绑定名称(例如,
num=12
)请注意,在第二个示例中,nums
和tri
确实引用了同一个对象(在tri=nums
之后),如果只是暂时的话,-1断言类型(tri)是tuple
-AssertionError
并且在python中,int
也是引用类型
num = 9
num2 = num
num = 12
print num2 // this prints 9 **BUT I expected 12 like abouve code**