Python论坛  - 讨论区

标题:[python-chinese] 关于"import或from都是赋值"的疑问

2006年04月09日 星期日 17:48

蛇蛋 sniperg4 at gmail.com
Sun Apr 9 17:48:15 HKT 2006

教材在"import或from都是赋值"的小节中提到:
・import 把整个模块对象赋值给一个名字。
・from 把一个或多个名字赋值给另一个模块中的同名子对象。
 我对这两句话不理解。在下边的例子中"模块对象"是什么?"一个名字"是什么?"另一个模块中的同名字对象"又是什么?
% cat small.py
x = 1
y =[1,2]
% python
>>>from small import x,y
>>>x = 42
>>>y[0] = 42
>>>
>>>improt small
>>>small.x
1
>>>small.y
[42,2]
另外,在这个例子中为什么x没变,而y却变了?"用from拷贝的名字就是对一个可以被共享的对象的引用;与函数参数一样,重新赋值一个已经取得的名字对一个用from拷贝的模块没有影响,但改变一个已经取得的可变对象可能会改变用from导入的模块中的对象"这句话可以解释吗?可我读不懂。
谁能帮我解释下,谢谢。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060409/1946c3e3/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月09日 星期日 18:08

员旭鹏 recordus at gmail.com
Sun Apr 9 18:08:41 HKT 2006

这样的用法有什么特殊的用途吗?

在06-4-9,蛇蛋 <sniperg4 at gmail.com> 写道:
>
> 教材在"import或from都是赋值"的小节中提到:
> ·import 把整个模块对象赋值给一个名字。
> ·from 把一个或多个名字赋值给另一个模块中的同名子对象。
>  我对这两句话不理解。在下边的例子中"模块对象"是什么?"一个名字"是什么?"另一个模块中的同名字对象"又是什么?
> % cat small.py
> x = 1
> y =[1,2]
> % python
> >>>from small import x,y
> >>>x = 42
> >>>y[0] = 42
> >>>
> >>>improt small
> >>>small.x
> 1
> >>>small.y
> [42,2]
>
> 另外,在这个例子中为什么x没变,而y却变了?"用from拷贝的名字就是对一个可以被共享的对象的引用;与函数参数一样,重新赋值一个已经取得的名字对一个用from拷贝的模块没有影响,但改变一个已经取得的可变对象可能会改变用from导入的模块中的对象"这句话可以解释吗?可我读不懂。
> 谁能帮我解释下,谢谢。
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>


--
I like Python & Linux.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060409/ee8801dd/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月09日 星期日 19:30

刘鑫 march.liu at gmail.com
Sun Apr 9 19:30:21 HKT 2006

在06-4-9,蛇蛋 <sniperg4 at gmail.com> 写道:
>
> 教材在"import或from都是赋值"的小节中提到:
> ・import 把整个模块对象赋值给一个名字。
> ・from 把一个或多个名字赋值给另一个模块中的同名子对象。
>  我对这两句话不理解。在下边的例子中"模块对象"是什么?"一个名字"是什么?"另一个模块中的同名字对象"又是什么?
> % cat small.py
> x = 1
> y =[1,2]
> % python
> >>>from small import x,y
> >>>x = 42
> >>>y[0] = 42
> >>>
> >>>improt small
> >>>small.x
> 1
> >>>small.y
> [42,2]
> 另外,在这个例子中为什么x没变,而y却变了?
>

因为x指向的数值对象1 是一个COW( Copy On
Write)的,而y不是,所以你修改了x的值,没有影响到small.x。而修改了y,并没有产生新的对象,small.y指向的就是y修改的那个链表。

"用from拷贝的名字就是对一个可以被共享的对象的引用;与函数参数一样,重新赋值一个已经取得的名字对一个用from拷贝的模块没有影响,但改变一个已经取得的可变对象可能会改变用from导入的模块中的对象"这句话可以解释吗?可我读不懂。
> 谁能帮我解释下,谢谢。
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>


--
欢迎访问:
http://blog.csdn.net/ccat

刘鑫
March.Liu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060409/a3dfba73/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月09日 星期日 19:49

蛇蛋 sniperg4 at gmail.com
Sun Apr 9 19:49:40 HKT 2006

Copy On Write 是什么意思?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060409/2cdae403/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月09日 星期日 20:03

刘鑫 march.liu at gmail.com
Sun Apr 9 20:03:32 HKT 2006

Copy On Write是一种对象设计风格,Copy On
Write的对象,在发生修改的时候,并不是直接修改这个对象,而是生成一个新的对象,赋给引用它的命名。Python中的数值、字符串,都是COW的。对于独立的对象访问,COW与否没有区别,当多个引用指向同一个对象,就会产生差异。COW的对象会使得发生修改的引用指向一个独立的新对象,而非COW的对象则会使所有指向它的引用都"得到"修改。

在06-4-9,蛇蛋 <sniperg4 at gmail.com> 写道:
>
> Copy On Write 是什么意思?
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>


--
欢迎访问:
http://blog.csdn.net/ccat

刘鑫
March.Liu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060409/26305b6d/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月09日 星期日 20:05

xxmplus xxmplus at gmail.com
Sun Apr 9 20:05:42 HKT 2006

cow是指在数据结构内部维护资源的一种策略,当多个相同的资源被不同函数(也可以是别的东西)呼叫时,在内部只维护一份实例,返回的只是一个指针。只有当某一个函数试图改变这个对象的时候才为其独立生成一份拷贝。优点就是负担小,速度快

在 06-4-9,蛇蛋<sniperg4 at gmail.com> 写道:
> Copy On Write 是什么意思?
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to
> python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to
> python-chinese-request at lists.python.cn
> Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
>
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月09日 星期日 20:33

蛇蛋 sniperg4 at gmail.com
Sun Apr 9 20:33:14 HKT 2006

small.x = 42 就可以改变它呢?

在06-4-9,刘鑫 <march.liu at gmail.com> 写道:
>
> Copy On Write是一种对象设计风格,Copy On
> Write的对象,在发生修改的时候,并不是直接修改这个对象,而是生成一个新的对象,赋给引用它的命名。Python中的数值、字符串,都是COW的。对于独立的对象访问,COW与否没有区别,当多个引用指向同一个对象,就会产生差异。COW的对象会使得发生修改的引用指向一个独立的新对象,而非COW的对象则会使所有指向它的引用都"得到"修改。
>
>  在06-4-9,蛇蛋 <sniperg4 at gmail.com> 写道:
>
> > Copy On Write 是什么意思?
> >
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to   python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
>
>
> --
> 欢迎访问:
> http://blog.csdn.net/ccat
>
> 刘鑫
> March.Liu
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060409/c67a1316/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月10日 星期一 10:28

helium helium.sun at gmail.com
Mon Apr 10 10:28:02 HKT 2006

from small import x,y
应该与
import small
x, y = small.x, small,y
等价
x=1相当给变量x重新赋值,small.x当然不变


On 4/9/06, 蛇蛋 <sniperg4 at gmail.com> wrote:
>
>  教材在"import或from都是赋值"的小节中提到:
> ・import 把整个模块对象赋值给一个名字。
> ・from 把一个或多个名字赋值给另一个模块中的同名子对象。
>  我对这两句话不理解。在下边的例子中"模块对象"是什么?"一个名字"是什么?"另一个模块中的同名字对象"又是什么?
> % cat small.py
> x = 1
> y =[1,2]
> % python
> >>>from small import x,y
> >>>x = 42
> >>>y[0] = 42
> >>>
> >>>improt small
> >>>small.x
> 1
> >>>small.y
> [42,2]
>
> 另外,在这个例子中为什么x没变,而y却变了?"用from拷贝的名字就是对一个可以被共享的对象的引用;与函数参数一样,重新赋值一个已经取得的名字对一个用from拷贝的模块没有影响,但改变一个已经取得的可变对象可能会改变用from导入的模块中的对象"这句话可以解释吗?可我读不懂。
> 谁能帮我解释下,谢谢。
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060410/dc3410f1/attachment-0001.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月10日 星期一 10:43

员旭鹏 recordus at gmail.com
Mon Apr 10 10:43:02 HKT 2006

那y呢?
在06-4-10,helium <helium.sun at gmail.com> 写道:
>
> from small import x,y
> 应该与
> import small
> x, y = small.x, small,y
> 等价
> x=1相当给变量x重新赋值,small.x当然不变
>

--
I like Python & Linux.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060410/87e379c8/attachment-0001.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月10日 星期一 10:49

helium helium.sun at gmail.com
Mon Apr 10 10:49:14 HKT 2006

既然y = small.y
y[0] = 42等价small.y[0] = 42
跟y = [42, 2]有本质区别

前者是修改y引用的对象,后者是y引用一个新的对象


On 4/10/06, 员旭鹏 <recordus at gmail.com> wrote:
>
> 那y呢?
> 在06-4-10,helium <helium.sun at gmail.com> 写道:
>
> >  from small import x,y
> >  应该与
> > import small
> > x, y = small.x, small,y
> > 等价
> > x=1相当给变量x重新赋值,small.x当然不变
> >
> >
>
> --
> I like Python & Linux.
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060410/2539ab73/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月10日 星期一 10:58

Gu Yingbo tensiongyb at gmail.com
Mon Apr 10 10:58:31 HKT 2006

small.y 和 y 的 id 是一样的,而small.x 和 x 的 id 是不一样的。

On 4/9/06, 蛇蛋 <sniperg4 at gmail.com> wrote:
>
> small.x = 42 就可以改变它呢?
>
> 在06-4-9,刘鑫 <march.liu at gmail.com> 写道:
>
> > Copy On Write是一种对象设计风格,Copy On
> > Write的对象,在发生修改的时候,并不是直接修改这个对象,而是生成一个新的对象,赋给引用它的命名。Python中的数值、字符串,都是COW的。对于独立的对象访问,COW与否没有区别,当多个引用指向同一个对象,就会产生差异。COW的对象会使得发生修改的引用指向一个独立的新对象,而非COW的对象则会使所有指向它的引用都"得到"修改。
> >
> >
> >  在06-4-9,蛇蛋 < sniperg4 at gmail.com> 写道:
> >
> > > Copy On Write 是什么意思?
> > >
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese at lists.python.cn
> > Subscribe: send subscribe to python-chinese-request at lists.python.cn
> > Unsubscribe: send unsubscribe to
> > python-chinese-request at lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
> >
> >
> >
> > --
> > 欢迎访问:
> > http://blog.csdn.net/ccat
> >
> > 刘鑫
> > March.Liu
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese at lists.python.cn
> > Subscribe: send subscribe to python-chinese-request at lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
> >
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060410/0ec165bd/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月10日 星期一 12:13

蛇蛋 sniperg4 at gmail.com
Mon Apr 10 12:13:52 HKT 2006

能不能说说为什么x和small.x的id不一样,而y和small.y的id却是一样的?
是不是像刘鑫说的,"1是数值,而数值和字符串都是cow的原因"?


在06-4-10,Gu Yingbo <tensiongyb at gmail.com> 写道:
>
> small.y 和 y 的 id 是一样的,而small.x 和 x 的 id 是不一样的。
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060410/6dd165fd/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月10日 星期一 12:16

蛇蛋 sniperg4 at gmail.com
Mon Apr 10 12:16:14 HKT 2006

在06-4-10,helium <helium.sun at gmail.com> 写道:
>
>  from small import x,y
>  应该与
> import small
> x, y = small.x, small,y
> 等价
> x=1相当给变量x重新赋值,small.x当然不变
>
> 你这是不是说错了?x,y = small.x,small.y意思不就是x=small.x吗?可是从例子结果来看,不是一个东西啊
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060410/1b3da7a8/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年04月10日 星期一 13:52

helium helium.sun at gmail.com
Mon Apr 10 13:52:42 HKT 2006

from small import x
相当于x绑定到了一个整数对象上
x=42,x又绑定到了另一个整数对象上
关键你没搞清楚name和object的关系


On 4/10/06, 蛇蛋 <sniperg4 at gmail.com> wrote:
>
>  在06-4-10,helium <helium.sun at gmail.com> 写道:
>
> >  from small import x,y
> >   应该与
> > import small
> > x, y = small.x, small,y
> > 等价
> >  x=1相当给变量x重新赋值,small.x当然不变
> >
> > 你这是不是说错了?x,y = small.x,small.y意思不就是x=small.x吗?可是从例子结果来看,不是一个东西啊
> >
>
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060410/592e6c42/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号