python argv open函数入参赋值问题

ex16.py

from sys import argv
script,filename=argv

t=open(filename,'w')
line1=input('line1:')
t.write(line1)
t.close()

运行后

py ex16.py test.txt
hello world
文本test.txt被成功写入'hello world'
以上是过程,我想问的是:
t.write(line1) 只是把line1内input的字符串赋予t,而变量t只是指向入参的内存地址,为什么修改了变量t的内容,就可以同时改变变量t指向的文本?

比如

> b=3
> a=b
> id(b)
199634
> id(a)
199634
> a=2
> id(a)
199531
> id(b)
199634

抱歉我为了理解open函数所做的变量比喻真的很糟糕,把问题弄的更乱了。谢谢大家对我的解答。

还是回到原来的问题上,open函数打开打文件为什么会被它赋予的变量改变?

我问了一个老师,他只是笼统的说: open之后的操作就是会影响file文件本身。 python会在人为close或脚本自然关闭后,将磁盘缓存中的数据写入‘入参文件’。

阅读 3.7k
4 个回答

你可能对赋值操作存在误解,变量不是盒子。

>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> b
[1, 2, 3, 4]

变量不是盒子

变量 ab 引用同一个列表,而不是那个列表的副本。可以把变量理解为标注,对象上面可以贴很多个这样的标注。当 b = 2 时,只是把标注b贴到了对象 2 上面,a标注和a标注下的对象都没有变化。

t.write(line1) 只是把line1内input的字符串赋予t,而变量t只是指向入参的内存地址,为什么修改了变量t的内容,就可以同时改变变量t指向的文本?

再来说下这个,这里并不是把 line1input的字符串赋予 t,这个不是赋值操作,是对象操作。t 是一个文件操作对象的标注,用 .write 就是对这个对象进行操作了,比如把一段文本写到文件对象里面。

Int and object are different.
You misunderstand a lot of things of object.

>>> class F:
...     a = 2
... 
>>> x = F()
>>> print(x.a)
2
>>> y = x
>>> y.a = 4
>>> print(x.a)
4
>>>
  1. open会返回一个<class '_io.TextIOWrapper'>类的实例对象,该对象的write方法会把line1写到对应的文本中。
  2. 这里牵扯到小整数对象池的问题:http://blog.csdn.net/wangyunf...

抱歉我为了理解open函数所做的变量比喻真的很糟糕,把问题弄的更乱了。谢谢大家对我的解答。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题