python / cpython

The Python programming language
https://www.python.org/
Other
60.78k stars 29.34k forks source link

no copy.copy problem description #53267

Closed 9432cd65-9f88-4bc6-8ad6-72e5ab1c730d closed 12 years ago

9432cd65-9f88-4bc6-8ad6-72e5ab1c730d commented 14 years ago
BPO 9021
Nosy @terryjreedy, @orsenthil, @giampaolo

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields: ```python assignee = None closed_at = created_at = labels = ['type-bug', 'docs'] title = 'no copy.copy problem description' updated_at = user = 'https://bugs.python.org/techtonik' ``` bugs.python.org fields: ```python activity = actor = 'techtonik' assignee = 'docs@python' closed = True closed_date = closer = 'orsenthil' components = ['Documentation'] creation = creator = 'techtonik' dependencies = [] files = [] hgrepos = [] issue_num = 9021 keywords = [] message_count = 10.0 messages = ['108069', '108299', '108300', '108355', '108413', '108433', '152938', '152939', '152940', '152941'] nosy_count = 6.0 nosy_names = ['terry.reedy', 'orsenthil', 'techtonik', 'giampaolo.rodola', 'docs@python', 'python-dev'] pr_nums = [] priority = 'normal' resolution = 'fixed' stage = 'resolved' status = 'closed' superseder = None type = 'behavior' url = 'https://bugs.python.org/issue9021' versions = ['Python 3.1', 'Python 2.7', 'Python 3.2'] ```

9432cd65-9f88-4bc6-8ad6-72e5ab1c730d commented 14 years ago

copy module covers very important aspect of Python programming. However its documentation doesn't provide any intro or overview of this problem starting right from details. When people meet copy construction in the code - the refer to module documentation and its doesn't completely answer two basic questions they have:

  1. why copy module is needed (i.e. what's the problem with var assignment)
  2. when and where it should be used
terryjreedy commented 14 years ago

The intro paragraph currently (3.2a) consists of "This module provides generic (shallow and deep) copying operations."

This could be expanded to ''' Assignment statements create bindings between a target and an object. They never duplicate or copy an existing object. For collections that are mutable or contain mutable items, a copy is sometimes needed so one can change one copy without changing the other. Sequences can be shallow copied by slicing the entire sequence(s[:]). (See below for the meaning of 'shallow'.) Some objects can be shallow copied with their class constructors (tuple, list, set, dict). This module provides generic shallow *and* deep copying operations. The latter is not otherwise available in an single operation or call.'''

terryjreedy commented 14 years ago

Shorter and better version.

Assignment statements create bindings between a target and an object. They never duplicate or copy an existing object. For collections that are mutable or contain mutable items, a copy is sometimes needed so one can change one copy without changing the other. This module provides generic shallow and deep copy operations (explained below). Shallow copies can also be obtained by whole sequence slicing (s[:]) and some class constructors (tuple, list, set, dict).

orsenthil commented 14 years ago

I am +0 on this change. The existing introduction is fine and the discussion where shallow and deep copy is discussed is more important.

It is okay to assume that the reader is aware of the assignment operation nature, i.e. it does not create a copy and you need this module.

The doc change suggested by Terry could be helpful in the tutorial where a copy module is mentioned.

9432cd65-9f88-4bc6-8ad6-72e5ab1c730d commented 14 years ago

The doc change suggested by Terry could be helpful in the tutorial where a copy module is mentioned.

Can you post a link to this tutorial here?

orsenthil commented 14 years ago

Can you post a link to this tutorial here?

Section 9.1 and 9.2 of the docs.python.org/tutorial It may not be as explicit as you might want it to be, but it does sets up background that assignments do not copy the object.

1762cc99-3127-4a62-9baf-30c3d0f51ef7 commented 12 years ago

New changeset 0e050b38e92b by Senthil Kumaran in branch '2.7': Issue bpo-9021: Add an introduction to the copy module. Doc changes suggested by Terry Reedy. http://hg.python.org/cpython/rev/0e050b38e92b

1762cc99-3127-4a62-9baf-30c3d0f51ef7 commented 12 years ago

New changeset a352e24b9907 by Senthil Kumaran in branch '3.2': Issue bpo-9021 - Introduce copy module better. Doc changes suggested by Terry http://hg.python.org/cpython/rev/a352e24b9907

New changeset bf6f306ad5cf by Senthil Kumaran in branch 'default': merge from 3.2 http://hg.python.org/cpython/rev/bf6f306ad5cf

orsenthil commented 12 years ago

Added suggested changes to the documentation. Thanks.

9432cd65-9f88-4bc6-8ad6-72e5ab1c730d commented 12 years ago

Perfectionist in me says that now copy.copy theory should be diluted with examples for those who can't grasp the concept of "binding of variables", but the patch perfectly covers the original user story. Thanks.