<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba" -->

---
title: Python Did It Again! #python #coding | daily.dev
description: Python 3.15 adds a new built-in callable for creating sentinel values with cleaner syntax. Before this, the speaker used object() to create sentinels, which...
canonical: https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Python Did It Again! #python #coding | daily.dev
og:description: Python 3.15 adds a new built-in callable for creating sentinel values with cleaner syntax. Before this, the speaker used object() to create sentinels, which...
og:url: https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba
og:image: https://api.daily.dev/og/posts/57ETgcdbA.png
og:image:alt: Python Did It Again! #python #coding
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Python Did It Again! #python #coding

**[Indently](https://daily.dev/sources/indently)** · 1 min read · 0 upvotes · 0 comments

## Summary

Python 3.15 adds a new built-in callable for creating sentinel values with cleaner syntax. Before this, the speaker used object() to create sentinels, which printed messy representations like 'object object' and needed extra boilerplate to fix. Type hinting sentinels was also a headache, and deep copying an object-based sentinel produced a new ID, so the copy was not recognized as the same. The new sentinel callable is easy to print, type hinting works correctly, and it is designed to preserve its identity when copied, pickled, and unpickled.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=Z9kpDUJQGoI>

## Questions this post answers

### How do I create a sentinel value in Python 3.15 without the object() hacks?

Python 3.15 introduces a new built-in callable specifically for creating sentinel values. It produces clean, readable string representations instead of the old 'object object' output from object(), supports custom representations, works correctly with type hints, and preserves identity properly when copied, pickled, or unpickled.

_Developers tracking new Python syntax features can follow version-specific changes like this on daily.dev._

### Why does deep copying a sentinel value created with object() break identity checks in Python?

Deep copying an object()-based sentinel creates a new object with a different id, so a comparison like 'copy is sentinel' returns False even though both are meant to represent the same singleton value. This identity mismatch happens because object() instances aren't designed to preserve identity through copying or pickling.

_Anyone debugging singleton identity bugs in Python can check version notes like this on daily.dev._

## Similar posts on daily.dev

- [TIL \#144 – Sentinel built-in](https://daily.dev/posts/til-144-sentinel-built-in-phazt8awu) · Planet Python · 0 upvotes · 0 comments
- [Python 3.15 Preview: Sentinel Values – Real Python](https://daily.dev/posts/python-3-15-preview-sentinel-values-real-python-yfznnfab6) · Real Python · 0 upvotes · 0 comments
- [PEP 661 – Sentinel Values](https://daily.dev/posts/pep-661-sentinel-values-yujk1mknv) · Lobsters · 1 upvotes · 0 comments

---

Tags: [#python](https://daily.dev/tags/python)

[View this post on daily.dev](https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Python Did It Again! #python #coding","url":"https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba"},"datePublished":"2026-10-30T21:36:00.876Z","dateModified":"2026-11-01T00:28:20.434Z","description":"Python 3.15 adds a new built-in callable for creating sentinel values with cleaner syntax. Before this, the speaker used object() to create sentinels, which...","image":"https://i.ytimg.com/vi/Z9kpDUJQGoI/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/Z9kpDUJQGoI/sddefault.jpg","isAccessibleForFree":true,"articleSection":"Indently","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Indently","logo":"https://media.daily.dev/image/upload/s--u6wAXJI9--/f_auto/v1725038127/logos/indently","url":"https://daily.dev/sources/indently"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"python","timeRequired":"PT1M","video":{"@type":"VideoObject","name":"Python Did It Again! #python #coding","description":"Python 3.15 adds a new built-in callable for creating sentinel values with cleaner syntax. Before this, the speaker used object() to create sentinels, which...","thumbnailUrl":"https://i.ytimg.com/vi/Z9kpDUJQGoI/sddefault.jpg","uploadDate":"2026-10-30T21:36:00.876Z","duration":"PT1M","url":"https://api.daily.dev/r/57ETgcdbA","embedUrl":"https://www.youtube.com/embed/Z9kpDUJQGoI"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Indently","item":"https://daily.dev/sources/indently"},{"@type":"ListItem","position":3,"name":"Python Did It Again! #python #coding"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/python-did-it-again-python-coding-57etgcdba#faq","mainEntity":[{"@type":"Question","name":"How do I create a sentinel value in Python 3.15 without the object() hacks?","acceptedAnswer":{"@type":"Answer","text":"Python 3.15 introduces a new built-in callable specifically for creating sentinel values. It produces clean, readable string representations instead of the old 'object object' output from object(), supports custom representations, works correctly with type hints, and preserves identity properly when copied, pickled, or unpickled. Developers tracking new Python syntax features can follow version-specific changes like this on daily.dev."}},{"@type":"Question","name":"Why does deep copying a sentinel value created with object() break identity checks in Python?","acceptedAnswer":{"@type":"Answer","text":"Deep copying an object()-based sentinel creates a new object with a different id, so a comparison like 'copy is sentinel' returns False even though both are meant to represent the same singleton value. This identity mismatch happens because object() instances aren't designed to preserve identity through copying or pickling. Anyone debugging singleton identity bugs in Python can check version notes like this on daily.dev."}}]}
```

