影中人 发表于 2023-2-27 22:54:11

函数(IV)的课后作业问题

x =
def invert(x):
   x = x[::-1]

invert(x)
print(x)

x =
def invert(x):
   x[:] = x[::-1]

invert(x)
print(x)
这两段代码为什么打印结果不一样呢?
当在定义函数时使用print(x)时,发现在函数内部,x已经翻转了,但是一出函数,发现第一段函数没有改变x,小甲鱼老师的说法我没有完全理解

影中人 发表于 2023-2-27 22:58:16

如果按照小甲鱼老师的解释,
x =
y = x
x = x[::-1]
x也会变成啊

小甲鱼 发表于 2023-2-28 04:04:05

影中人 发表于 2023-2-27 22:58
如果按照小甲鱼老师的解释,
x =
y = x


请对比以下两段代码:

>>> x =
>>> y = x
>>> x = x[::-1]
>>> x

>>> y

>>> x =
>>> y = x
>>> x[:] = x[::-1]
>>> x

>>> y

同样是赋值给 y,但是第一种方法并不会影响 y 的值,而第二种则会同时修改 y 的值。

影中人 发表于 2023-2-28 10:04:23

小甲鱼 发表于 2023-2-28 04:04
请对比以下两段代码:




这是为啥呢,是因为x是指代的对的引用,而x[:]指代的是内存中实际存放的吗?

骑士123456 发表于 2023-2-28 13:12:24

第一段代码中函数内部试图重新赋值外部变量x,所以外部变量x被python屏蔽保护,函数内部的那个x和外面那个x不是同一个变量。
第二段代码中函数内部通过列表分片修改列表,这是允许的,不会触发屏蔽保护。
页: [1]
查看完整版本: 函数(IV)的课后作业问题