萌新提问作业题,help!
>>> myteacher = '小甲鱼'>>> yourteacher = myteacher
>>> myteacher = '黑夜'
>>> print(yourteacher)
第三讲中答案是小甲鱼,是因为python默认是按值传递吗,如果是这样的怎么才能让她按地址传递呢?
即使是按地址传递 賦值也不存在傳遞除非有觀察者去做額外操作
kogawananari 发表于 2022-1-8 16:51
即使是按地址传递 賦值也不存在傳遞除非有觀察者去做額外操作
额,还是有点不太懂,是因为第二行把myteacher中的小甲鱼赋给了yourtheacher,那么这个youteacher就直接是小甲鱼了。那如果程序想让youteacher随着myteacher变化而变化改怎么写程序呢? 本帖最后由 kogawananari 于 2022-1-8 17:13 编辑
xuebowen 发表于 2022-1-8 16:58
额,还是有点不太懂,是因为第二行把myteacher中的小甲鱼赋给了yourtheacher,那么这个youteacher就直接 ...
python做不到全局變量的觀察者 JavaScript倒是可以寫個demo
window = global//如果是瀏覽器環境去掉這句
myteacher = '小甲鱼'
Object.defineProperty(window,'youteacher',{
get:()=>myteacher,
set:value=>(myteacher=value)
})
console.log(youteacher)//小甲鱼
myteacher = '黑夜'
console.log(youteacher)//黑夜 本帖最后由 傻眼貓咪 于 2022-1-8 17:53 编辑
xuebowen 发表于 2022-1-8 16:58
额,还是有点不太懂,是因为第二行把myteacher中的小甲鱼赋给了yourtheacher,那么这个youteacher就直接 ...
因为 Python 万物皆对象,所以好象没有像 C 语言一样的指针概念。
a = b = 13 # a 和 b 指向同样地址
print(id(a), id(b)) # 打印地址
a += 5 # 增幅 a 值
print(a, b) # 打印 a 值和 b 值
print(id(a), id(b)) # 发现 a 和 b 已经不同地址了,a 地址随着值而改变了,b地址不变如上,即使 a 已经赋值整数,之后还能变成字符串,布尔值,浮点数都可以(地址也一直改变),不像 C 语言,内存地址不变,而是值改变。
C 语言:#include <stdio.h>
int main()
{
int *a, b;
a = &b;
b = 13;
printf("%p %p\n", a, &b);
*a += 5;
printf("%d %d\n", *a, b);
printf("%p %p\n", a, &b);
return 0;
} 本帖最后由 白two 于 2022-1-8 23:05 编辑
>>> myteacher = '小甲鱼'
>>> yourteacher = myteacher
>>> myteacher = '黑夜'
myteacher = '小甲鱼'
开辟了一块内存,用来储存 '小甲鱼' 这个字符串,创建一个变量 myteacher 去指向这个内存
yourteacher = myteacher
创建了一个变量 yourteacher ,指向 myteacher 指向的内存,注意:yourteacher 指向的是 '小甲鱼' 所在的内存,而不是 name 这个变量
本质上是: hero ='小甲鱼'
myteacher = '黑夜'
开辟了一块内存,用来储存 '黑夜' 这个字符串,让变量 myteacher 指向这个内存
注意:这个时候变量 yourteacher 还是指向的还是 '小甲鱼' 所在的内存
你看下面的这个内存变化就懂了:
>>> a = 'a'
>>> b = a
>>> id('a')
2240291661808
>>> id(a)
2240291661808
>>> id(b)
2240291661808
>>> a = 'b'
>>> id('a')
2240291661808
>>> id('b')
2240291356848
>>> id(a)
2240291356848
>>> id(b)
2240291661808
你看 b 的 id 是没有变的,它的 id 还是等于 'a' 的 id
页:
[1]