Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请解释这两种代码之间的区别_Python - Fatal编程技术网

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

Python 请解释这两种代码之间的区别,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引用的对象

代码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
引用的对象(9)。

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


您可以使用
tri=nums[:]
通过值来复制nums

code 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**