kangwonlee / kangwonlee/2018pycpp

Ch 30 / 20.python.list-reference.ipynb — Python side complete, C++ bridge missing

Open
#76 0 comments 0 reactions 0 assignees View on GitHub
enhancement freshman-audience
Dominant language
Jupyter Notebook
Stars
3
Forks
1
PR merge metrics
No merged PRs in 30d

Description

The notebook `30.pointers-and-memory-management/20.python.list-reference.ipynb` sets up an excellent pedagogical hook: the Python `[one_row] * n_row` aliasing pattern (where one inner list gets referenced 10 times) is exactly the right entry point for introducing reference semantics in a language students already know. The predict-before-run prompts in cells 12 and 17 ("What do you think happened?" / "Why the result is different this time?") are pedagogically strong.

However, the notebook stops at the exercise prompt (cell 24):
> "Write two C/C++ programs that respectively regenerate python results above."

without providing the C++ side of the bridge. Students are left to make the cross-language connection on their own — exactly the connection the notebook's title (`python.list-reference`) and structure promise to deliver.

### Suggested addition (~3-4 hours of work)

Add a new section after the Python observations (around cell 22, before the exercise) that:

1. **Writes the equivalent C++ programs** — one with raw `int**` showing the aliasing bug parallel; one with `std::vector>` showing the safe modern equivalent.

2. **Translates the `is` / `id()` mental model to C++** — `Python a is b` corresponds to `C++ &a == &b` for the aliasing case. Show this with `cout << &matrix[0] << " == " << &matrix[1] << '\n';` parallel.

3. **Names the analogy explicitly** with a side-by-side table:
| Python | C/C++ | What it means |
|---|---|---|
| `b = a` (list) | `int *b = a;` | Both point to same memory |
| `b = a.copy()` | `std::vector b = a;` | Deep copy |
| `a is b` | `&a[0] == &b[0]` | Same memory? |

4. **Connects to "shallow vs deep copy"** as a named concept that bridges both languages.

5. **Closes with a "predict before run" mission** parallel to the Python exercises.

### Why this matters

This notebook contains the single most pedagogically unique idea in the repo — using Python as the anchor for C++ pointer semantics. As-is, it's a sketch of the bridge rather than the bridge itself. Completing it would make this the most powerful piece of the Ch 30 supplement-for-freshmen role discussed in 2026-05-20 session evaluation.

### Context
Tagged `freshman-audience` because completing this bridge is specifically what makes the chapter useful for post-Python freshmen (rather than the graduate audience the chapter was originally written for).

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.